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