ruby方法作为实例方法以及类方法

时间:2017-06-29 19:13:38

标签: ruby

在irb控制台中,我创建了一个类'Hello'

irb(main):001:0> class Hello
irb(main):002:1> end
=> nil

并在'Hello'类之外创建了一个名为'hi'的方法

irb(main):003:0> def hi
irb(main):004:1> 'hiiii'
irb(main):005:1> end
=> :hi

现在这个hi方法充当类方法和实例方法

irb(main):006:0> Hello.hi
=> "hiiii"
irb(main):007:0> Hello.new.hi
=> "hiiii"
irb(main):008:0> hi
=> "hiiii"

为什么使用类'Hello'来调用这个hi方法,即使它在'Hello'类上下文之外?

1 个答案:

答案 0 :(得分:6)

" main"中定义的方法上下文(即不在类或模块声明中)是在Object上定义的。由于每个类(包括(big-C)Class)都继承自Object,因此该方法存在于每个对象和每个类的继承链中。您可以通过在Object上显式定义方法来观察相同的行为:

class Object
  def foo
    puts "Hello"
  end
end

class Bar; end

Bar.foo
# => Hello

Bar.new.foo
# => Hello

foo
# => Hello