与“类实例方法”调用混淆

时间:2013-03-30 09:34:36

标签: ruby

如果我可以通过Class instance methods拨打instances of class,我试过了。据此尝试了以下内容:

class Foo
    def show; p "hi" ; end
    def self.display ; p "hello" ; end
end
#=> nil

Foo.display
#"hello"
#=> "hello"

Foo.new.show
#"hi"
#=> "hi"

Foo.show
#NoMethodError: undefined method `show' for Foo:Class
#from (irb):7
#from C:/Ruby200/bin/irb:12:in `<main>'

但是在下面的调用中我期望与 NoMethodError:undefined method`display' 相同的错误。但为什么不是这样呢?

Foo.new.display
#<Foo:0x538020> #=> nil
foo = Foo.new
#=> #<Foo:0x22bc438>
foo.display
#<Foo:0x22bc438> #=> nil

1 个答案:

答案 0 :(得分:3)

所有对象都有一个现有方法display

class Bar
end

Bar.new.methods.grep(/disp/) # => [:display]
Bar.methods.grep(/disp/) # => [:display]

您的代码只会覆盖Foo的实例。选择其他名称(例如display1),您就会看到预期的错误。