【发布时间】:2016-12-19 21:43:25
【问题描述】:
我目前正在通过https://wiki.gnome.org/Projects/Vala/Tutorial 的 Vala 教程进行学习。现在我偶然发现了一个需要进一步解释的部分;在本教程最后的对象属性部分中,介绍了结构属性。给出了一个示例来说明如何检索此类属性:
struct Color
{
public uint32 argb;
public Color() { argb = 0x12345678; }
}
class Shape: GLib.Object
{
public Color c { get; set; default = Color(); }
}
int main()
{
Color? c = null;
Shape s = new Shape();
s.get("c", out c);
}
教程指出:“这样,c 是一个引用而不是堆栈上的颜色实例。您传递给s.get() 的是Color ** 而不是Color *.”
我的问题是关于上面的陈述。首先,有人可以详细说明“你传递给s.get()的是Color **而不是Color *.”是什么意思。另外,这是否意味着以下内容
int main()
{
Shape s = new Shape();
Color c = s.c;
}
导致s.c 的值 被分配给c?
编辑:我在valac -C structs.vala 中运行了上面的示例。 main 方法的相关 C 等效项是
gint _vala_main (void) {
gint result = 0;
Color* c = NULL;
Shape* s = NULL;
Shape* _tmp0_ = NULL;
c = NULL;
_tmp0_ = shape_new ();
s = _tmp0_;
g_object_get ((GObject*) s, "c", &c, NULL);
result = 0;
_g_object_unref0 (s);
_color_free0 (c);
return result;
}
【问题讨论】:
标签: vala