创建不带样板的不可变属性

时间:2018-01-11 22:36:50

标签: immutability d

我正在尝试在我的程序中为结构的不可变字段创建属性,但我不喜欢使用它需要的样板量。 我只是想让舒尔没有更短的路。

struct Foo
{
    private immutable int[] bar_;
    @property immutable public immutable(int[]) bar() { return bar_;} 

    this(immutable int[] bar)
    {
        this.bar_ = bar;
    }
}

void main()
{
    immutable foo = Foo([0, 1, 2, 3, 4]);
    auto bar = foo.bar;
}

我希望像

这样的东西
private immutable int[] bar_;
@property public immutable(int[]) bar() { return bar_;} 

甚至是半c#风格

public immutable int[] bar { get; }

我目前拥有的版本似乎有很多模板和混乱。我希望有一个更短的方式来编写一个' bar()'我不知道的功能。

1 个答案:

答案 0 :(得分:3)

您可以使用accessors库生成setter:

import accessors;

struct Foo
{
    @Read("public")
    private immutable int[] bar_;

    mixin(GenerateFieldAccessors);
}

然而,正如Adam所说,您通常不需要或不想使用immutable字段的setter和getter属性。