簡體   English   中英

Ruby的length方法是符號嗎? 為什么:length有時與length相同?

[英]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

當然,這是一個壞主意,但這是很重要的。 但是讓我們如此輕松地在:lengthlength以及:old_lengthold_length之間切換感到困擾。 所以我這樣嘗試了:

class Array
  alias old_length length
  def length
    old_length / 2
  end
end
puts [1, 2, 3].length

它工作得很好-顯然就像第一個版本。 我覺得好像很明顯我想念什么,但是我不確定那是什么。

那么,在這種情況下,為什么:namename可以互換?

方法不是符號,但它的名稱是。 只需寫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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM