2017-04-21 43 views
1

我想了解不是由我寫的代碼。我如何知道方法期望的參數類型?例如,假設我有一個方法:我如何知道方法所需的參數類型?

def foo(bar) 
    @bar = bar 
    @baz = get_user(@bar.user) 
end 

我怎麼知道我應該發送給哪個對象?

+0

http://rubylearning.com/satishtalim/duck_typing.html – emaillenin

回答

4

您無法知道foo正在等待接收什麼樣的參數,您只知道該對象必須在您的示例中響應user

這個原理被稱爲Duck Typing:在正常的打字中,假設適合性僅由對象的類型決定。在鴨子打字中,對象的適合性由某些方法和屬性(具有適當的含義)的存在來確定,而不是對象的實際類型。

+0

因此,如果許多對象屬於用戶的話,我怎麼能知道哪個對象應當阻止所接受? (沒有關於什麼酒吧應該接受的文檔) 沒有一種合乎邏輯的方式來知道這個嗎?編譯器如何知道? – blu

+0

不是由語言指定的,您現在依賴於代碼。我想你也沒有規格,對吧?這種方法不是在代碼中的其他地方使用嗎? –

+0

是的,它被用在代碼中的其他地方。非常感謝你! – blu

相關問題