考虑:d成员函数属性
class B
{
public:
int i = 4;
}
class A
{
public:
B b;
this()
{
b = new B;
}
ref B f()
{
return b;
}
}
裁判存储类中的成员函数f
的前面是多余的吗? Class对象始终按引用传递,因此返回B
和ref B
是否等同?
第二:pure
会员功能?纯函数只返回依赖于参数的东西。因此,它不应该依赖于该类的任何数据成员,因为即使传入了相同的参数,它们也可能会更改该函数的输出。因此,pure
成员函数因此也是一个static
成员函数? (反过来也许不对)
第三:const和不可变成员类有什么区别?区分不可变和const类对象的成员函数调用?在语义上,它是平等的,我们不能改变这两个属性的数据成员,对吧?
第四:我应该添加尽可能多的功能属性吗?像pure
,const
或immutable
,nothrow
和final
?
真棒,刚发现这工作:
inout(B) f() inout
{
return b;
}
在完美模块化代码的情况下,所有的功能将是纯粹的? – 2011-12-26 18:17:13
@Daevius,你不能从纯函数中调用不纯的函数。这排除了系统调用以及取决于它们的一切。我认为,通过这个衡量标准,你的代码永远不会“完美”模块化,它总是依赖于某种单一的行为。 – 2011-12-26 19:05:10
有关'pure'的更多信息,请参阅以下最近的问题:http://stackoverflow.com/questions/8572399/how-is-this-pure-function-able-to-modify-non-private-state – 2011-12-27 00:32:29