[英]Explicit use of `self` in method name in class definition
這段代碼來自Rails Crash課程書:
class Accessor
def self.accessor(attr)
class_eval "
def #{attr}
@#{attr}
end
def #{attr}=(val)
@#{attr} = val
end
"
end
end
這個想法是, Accessor
的子類可以通過使用屬性名稱調用accessor
方法來創建獲取器和設置器方法,我們希望為其生成獲取器和設置器方法的屬性名稱:
class Element < Accessor
accessor :name
...
但是,為什么在def self.accessor(attr)
使用self
?
因為您想為一個類的所有實例定義訪問器; 您不想為某些實例定義它們,也不想為其他實例定義它們。 因此,定義訪問器是您要針對類而不是實例執行的操作; 因此accessor
必須是類方法,而不是實例方法。 使用時將在類主體中調用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.