如何为数组创建set属性?

时间:2012-12-17 13:07:13

标签: arrays properties d

我有:

@property float x(float[2] vector)
{
    return vector[0];
}

@property void x(float[2] vector, float value)
{
    vector[0] = value;
}

我可以声明一个数组,例如float[2] a;然后通过简单地调用a.x来获取数组的第一个元素,但如果我想设置a[0],我就不能致电a.x = 3.14。它不会给编译器带来问题,也不会引发异常。后来当我得到a[0]时,它表示NaNfloat.init。这意味着从未设置过[0]且a.x同时有效且无效。

我只想要一个float数组并且具有get和set属性x。有没有办法做到这一点? 我知道我可以使用a.x(3.14)来设置a[0],但我希望x成为a的成员属性。

1 个答案:

答案 0 :(得分:5)

静态数组按值传递。您需要使用ref通过引用传递:

@property float x(ref float[2] vector)
@property void x(ref float[2] vector, float value)

注意:我指的是D2。 D1静态数组中的AFAIK过去是通过引用传递的,但是在D2中它们默认是按值传递的。