class method는 사실상 singleton method

Tags:

루비의 클래스 메소드는 사실상 싱글톤 메소드입니다.

irb(main):001:0> class Foo
irb(main):002:1>   def self.bar
irb(main):003:2>   end
irb(main):004:1> end
=> nil
irb(main):005:0> Foo.singleton_methods
=> ["bar"]
irb(main):006:0> Foo2 = Class.new
=> Foo2
irb(main):007:0> class << Foo2
irb(main):008:1>   def bar
irb(main):009:2>   end
irb(main):010:1> end
=> nil
irb(main):011:0> Foo2.singleton_methods
=> ["bar"]
irb(main):012:0>

그러나 여기에서 볼 수 있듯이, 둘간의 약간의 차이는 있습니다.

X = 1
class C
X = 2
def self.a
puts X
end
end

class << C def b puts X end end C.a # 2 (C::X) C.b # 1 (top-level X) [/code] 바로 상수를 보는 visibility가 다르게 되는 거죠.