假设我有这样的全局方法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)
我错过了什么?
答案 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