有人可以幫我理解下面的代碼嗎?有人可以解釋respond_to嗎? :每?
array = [1,2,3,4];
if array.respond_to? :each
puts "1234"
else
puts "5678"
end
我可以理解的代碼的結果,但什麼是:each
語法?
是:each
一個全局方法嗎?爲什麼我們可以這樣寫呢?或者我可以如何瞭解它?
有人可以幫我理解下面的代碼嗎?有人可以解釋respond_to嗎? :每?
array = [1,2,3,4];
if array.respond_to? :each
puts "1234"
else
puts "5678"
end
我可以理解的代碼的結果,但什麼是:each
語法?
是:each
一個全局方法嗎?爲什麼我們可以這樣寫呢?或者我可以如何瞭解它?
:each
是一個Symbol
,這有點像String
,但更有限,更有效的比較平等。它是不是的一種方法;它確實是一種方法名稱。
respond_to?
是在Object
上定義的方法,幾乎所有的Ruby對象都最終從中繼承。
當你說[1, 2, 3, 4].each
時,它會發送信息:each
到Array
對象[1, 2, 3, 4]
。 Array
類對象知道它的實例知道在接收到這樣的消息時該怎麼做,因此Array.respond_to?(:each)
返回true
。基本上,如果array.respond_to?(:each)
是false
,那麼array.each
將引發錯誤。 [請注意,因爲p11y在評論中註釋,如果array
確實是Array
,那麼這將始終返回true
。但程序員可以說謊,並且array
不一定是Array
;例如:array = "not an Array, fooled you!"
]
[1, 2, 3, 4].respond_to? :each
相當於[1, 2, 3, 4].respond_to?(:each)
。
在附註上,如果您想在一行中填充多個語句,那麼在Ruby中只需要分號。例如,與C不同的是,分號是語句終止符,在Ruby中它是語句分隔符。因此編寫array = [1, 2, 3, 4];
是不好的風格。
+1你解釋得好多了。注意:變量'array'實際上命名不好,因爲它也可能包含與Array不同的東西,因此檢查。 –
謝謝,好點。 – Amadan
謝謝你一噸!現在感覺好多了〜! :D也,我看到一些文檔說,如果我們定義一個字符串像: – wiwengweng