在没有样板的情况下创建不可变属性

Creating immutable properties without boilerplate

我试图在我的程序中为结构的不可变字段创建属性,但我不喜欢让它工作所需的样板数量。 我只想确保没有更短的方法。

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()' 函数。

您可以使用 accessors 库生成 setters:

import accessors;

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

    mixin(GenerateFieldAccessors);
}

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