2013-04-09 51 views
2

D語言有'別名...'。 Go嵌入了字段。在下面的代碼中,Dart是否有辦法到達齧齒動物的大腸,而不經過內臟?理想情況下,某種暴露內部組合的方法,不需要在每個動物中使用一些常見的內部組件創建轉發呼叫?自動呼叫轉移 - 訪問齧齒動物的大腸

import 'dart:io'; 

class Stomach { 
    work() { print("stomach"); } 
} 
class LargeIntestine { 
    work() { print("large intestine"); } 
} 
class SmallIntestine { 
    work() { print("small intestine"); } 
} 

class Guts { 
    Stomach stomach = new Stomach(); 
    LargeIntestine largeIntestine = new LargeIntestine(); 
    SmallIntestine smallIntestine = new SmallIntestine(); 
    work() { 
    stomach.work(); 
    largeIntestine.work(); 
    smallIntestine.work(); 
    } 
} 

class Rodent { 
    Guts guts = new Guts(); 
    work() => guts.work(); 
} 

main() { 
    Rodent rodent = new Rodent(); 
    rodent.guts.largeIntestine; 
    rodent.work(); 
} 

回答

2

我很欣賞你在...生物學的興趣,並很高興地說,你要尋找的結構可能是get關鍵字。

參見:http://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html#classes-getters-and-setters

class Rodent { 
    Guts guts = new Guts(); 
    work() => guts.work(); 

    // Getter for the Rodent's large intestine. 
    LargeIntestine get largeIntestine => guts.largeIntestine; 
} 

main() { 
    Rodent rodent = new Rodent(); 

    // Use the getter. 
    rodent.largeIntestine; 
    rodent.work(); 

    rodent.awake(); 
    rodent.recognizeMaster(); 
    if (rodent.self.awareness && rodent.self.isMonster) { 
    rodent.turn.on(rodent.master); 
    print("Oh. Oh, no! NoOooOO! Argghhhhhh..."); 
    rodent.largeIntestine.work(); 
    } 
} 

或者,如果你正在尋找保存編寫工作,你可以有一個超類或接口或混入(取決於你想要做什麼),有

class Animal { 
    LargeIntestine largeIntestine = new LargeIntestine(); 
    ... 
} 

class Rodent extends Animal { ... } 

class Rodent extends Object with Animal { ... } 
:你要找的屬性

請參閱:http://www.dartlang.org/articles/mixins/

+0

謝謝。實際上,我正在尋找比爲每個動物的每個器官宣佈「獲得」更少的工作。例如,用D你可以在Rodent中「混淆這個膽量」,然後你可以直接從Rodent中使用膽量成員。因此,這是一個玩具的例子,但假設將有30只動物,我不想要30 * 3的複製/粘貼獲得者(即沒有複製/粘貼轉發)。我還沒有在Dart中使用mixins,所以也許這有一個潛在的解決方案? – user1338952 2013-04-09 19:51:30