【发布时间】:2019-03-21 09:36:04
【问题描述】:
在 Ruby 中你可以使用a + b,相当于a.+(b)。
您还可以使用def +(other); end 覆盖+() 方法。
反引号有替代语法吗?我知道这行得通:
class Foo
def `(message)
puts '<' + message + '>'
end
def bar
`hello world`
end
end
Foo.new.bar # prints "<hello world>"
但这不起作用,例如
Foo.new.`hello world`
【问题讨论】:
-
提示:如果你想用参数调用一个名为
foo的方法,你怎么做? -
bar是如何工作的? -
您必须使用
Foo.new.send(:`, "hello_world"),但我认为这不是您尝试执行此操作的原因,而是您尝试安全地解析/评估某些模板。很抱歉,但这可能比您想象的要困难得多。用户仍然可以使用::Kernel.send(:`, 'foo')或许多其他技巧。 -
@KimmoLehto:没有理由使用
send。您可以使用普通的方法调用语法。问题只是 OP 似乎不理解 Ruby 中的普通方法调用是什么样的。 -
@KimmoLehto:使用
send实际上只在irb中使用。正如@JörgWMittag 所说,它在没有send的rb-file 中工作正常@
标签: ruby operator-overloading operators backticks