考慮: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