在方法定义中省略`self`之间的区别是什么?

时间:2012-11-21 08:28:02

标签: ruby syntax methods self

我知道self是调用方法的接收者。 但我不知道方法定义中是否没有self

代码示例:

class One
  def kk
    "kk"
  end
  def self.kkk
    "kkk"
  end
end

puts One.new.kk
puts One.kkk

为什么我需要使用new方法One使用One.new.kk

2 个答案:

答案 0 :(得分:1)

self.kkk这里定义了One的类方法。如您所知,self是接收者。在这里的上下文中,它是One类。

并且One.new返回类One的实例。 kk是仅由实例调用的实例方法。

答案 1 :(得分:1)

class Demo2
  def self.method1(a)
    p a.is_a? Demo2
  end

  def method2(b)
    p b.to_s
  end

end
a=Demo2.new
# here, if you type a.... wait for hint, you just can only get method2()
# just because it class self.
a.method2('123')
Demo2.method1(a)
p Demo2   # this is a class
p a       # this a class instance


>'123'   
>true
>Demo2
>#<Demo2:0x290d768>

我认为这个简单的代码可以让你清楚,我不会和你谈论 OOP ,这太无聊了!^ _ ^