如何从全局范围调用与ruby中的实例方法同名的方法?

时间:2012-03-06 23:23:10

标签: ruby

假设我有这样的全局方法hello(name)和一个实例方法hello

def hello(name)
  puts("Hello " + name)
end

class String
  def hello
    hello(self)         # does not work, see below
  end
end

我希望能够说出

"world".hello()

但红宝石不会让我。抱怨

in `hello': wrong number of arguments (1 for 0) (ArgumentError)

我错过了什么?

4 个答案:

答案 0 :(得分:6)

这应该有效

class String
  def hello
    Kernel.send(:hello,self)
  end
end

答案 1 :(得分:3)

这个问题可以回答这个问题:How to access a (shadowed) global function in ruby

基本上,全局对象上的def会在Object上创建一个私有方法,所以你必须通过一些箍来调用它。

答案 2 :(得分:1)

Object.send(:hello,self)也有效。

答案 3 :(得分:0)

为全局方法创建别名:

alias hello_global hello