[英]Are all class methods defined with “def self.foo”?
我對以下想法正確嗎? 建議/反饋非常感謝!
通過查看是否在方法名稱之前指定了關鍵字self
我們可以判斷哪個方法是實例方法,哪個方法是類方法。
因此,該方法(例如: def self.foo_bar
)定義為類方法。 另一方面, def foo_bar
被定義為實例方法。
不,您不能那樣做。 考慮一下:
class C
class << self
def m
puts 'pancakes!'
end
end
def i
puts 'eggs'
end
end
這樣就為您提供了C
上的類方法m
,該方法的聲明中沒有“自我”。 但是,您可以向類詢問有關其方法的信息:
C.methods.include? :m
# true
C.methods.include? :i
# false
C.instance_methods.include? :i
# true
考慮到Ruby類的可變性,詢問類是唯一的確定方法。
除了帶有self.
方法外,還有更多的方法來定義類方法self.
在類定義中:
class A
def A.method1
end
class << self
def method2
end
end
end
A.instance_eval do
def method3
end
end
module B
def method4
end
end
A.extend B
p A.methods.first(4)
# >> [:method1, :method2, :method3, :method4]
作為另一種選擇,您可以在以下代碼段的幫助下查看所有類方法:
class C
class << self
def first
end
end
def C.second
end
def self.third
end
end
eigenclass = class << C; self; end
eigenclass.instance_methods(false) # => [:first, :second, :third]
這是因為所有類方法都是該Class對象的eigenclass實例方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.