Ruby中是否有用于反引号的备用语法?

时间:2019-03-21 09:36:05

标签: ruby operator-overloading operators backticks

在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`

1 个答案:

答案 0 :(得分:2)

.+和反引号之间没有区别

从上下文中,messageString。因此,请使用引号。

class Foo
  def `(message)
    puts '<' + message + '>'
  end
end

Foo.new.` 'hello world' #prints <hello world>

由于代码风格,use parentheses最好

Foo.new.`('hello world') #prints <hello world>

此代码在rb文件中完美运行。

有人可能会说它在irb中不起作用。但是irb不是万能药(例如,如果在行的开头而不是结尾使用.)。 因此,如果您想在irb中使用它,请使用

Foo.new.send(:`, 'hello world')