代码之家  ›  专栏  ›  技术社区  ›  Nathan

在Fixnum的实例上定义方法

  •  1
  • Nathan  · 技术社区  · 7 年前

    object = Object.new
    def object.foo
      puts "5"
    end
    

    Fixnum 不起作用:

    def 3.foo
      puts "3"
    end
    
    def 3.foo
         ^
    (irb):7: syntax error, unexpected keyword_end, expecting end-of-input
    

    这是什么原因?

    1 回复  |  直到 7 年前
        1
  •  5
  •   Jörg W Mittag    7 年前

    这里有两件事在起作用。

    有一件事是 Fixnum 首先运行它。

    第二件事是Ruby的语法很复杂,因此有很多暗角情况。您似乎已经找到了一个,其中 .

    当然,这其实不是什么大问题,因为正如我前面提到的, 无论如何,我们都不能上singleton课:

    object = 3
    
    def object.foo
      puts "3"
    end
    # TypeError: can't define singleton