[英]Is Ruby's length method a symbol? Why is :length sometimes the same as length?
在閱讀有關在Ruby中重新定義方法的難易程度時,我遇到了以下內容:
class Array
alias :old_length :length
def length
old_length / 2
end
end
puts [1, 2, 3].length
當然,這是一個壞主意,但這是很重要的。 但是讓我們如此輕松地在:length
和length
以及:old_length
和old_length
之間切換感到困擾。 所以我這樣嘗試了:
class Array
alias old_length length
def length
old_length / 2
end
end
puts [1, 2, 3].length
它工作得很好-顯然就像第一個版本。 我覺得好像很明顯我想念什么,但是我不確定那是什么。
那么,在這種情況下,為什么:name
和name
可以互換?
方法不是符號,但它的名稱是。 只需寫length
調用方法length
。 要指定方法的名稱而不是執行方法,請使用符號。
class Array
def show_the_difference
puts length
puts :length
end
end
['three', 'items', 'here'].show_the_difference
# prints "3" for the first puts and then "length" for the second
您發現使用alias
的情況是一個例外,只是因為alias
工作方式與該語言中的其他所有方式不同。
alias
是經過特殊處理的原語,顯然可以同時使用符號和裸名。 相關的alias_method
只是一個普通方法,必須使用普通語法。
alias_method :old_length, :length
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.