2014-05-06 34 views
1

我在想如何指定循環塊參數的對象類型。Ruby:如何指定循環塊參數中的類

基本上,我想能夠說:

my_collection = MyCollection.new 
my_collection.each do |my_collection_object| 
    # how can I call method1 and method2 of my_collection_object? 
    my_collection_object.method1 
    my_collection_object.method2 
    etc... 
end 

我相信,我應該寫我自己的迭代循環法(#each)我自己的集合類,但因爲我是一個完成noob,我無法弄清楚從哪裏開始。請給我指導。感謝幫助!

編輯: 我想進一步澄清我的不理解。爲了完成上面的操作,我有下面的類,我想返回#對象的#each方法塊參數。

如果我只是從上面的代碼片段調用method1和method2,它會自動知道在哪裏查找method1和method2嗎?它是如何做到的? (很抱歉,如果原來的問題略有改變)

class My_Collection_Object 
    def method1 
    ... 
    end 
    def method2 
    ... 
    end 
end 
+0

嗯,我不明白=)爲什麼你不能調用這些方法? – mdesantis

+0

我也沒有。你應該更清楚地提出你的問題。 –

+0

所以:你有一個'MyCollection'類,你想遍歷它的一些實例嗎?或通過一些實例屬性?你可以與我們分享你的MyCollection實現嗎? – mdesantis

回答

0

你不需要擔心傳遞類型信息成塊,因爲Ruby使用Duck Typing

在鴨子打字中,程序員只關心確保對象在給定的環境中按照他們的要求行事,而不是確保它們屬於特定類型。

這意味着您不必擔心將類型傳遞到塊中,因爲Ruby解釋器會知道該方法是否存在於運行時。如果您嘗試在沒有定義這些方法的類型上使用method1method2,它將僅引發異常。