Есть ли в Ruby альтернативный синтаксис для обратных кавычек? - PullRequest
2 голосов
/ 21 марта 2019

В 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 Ответ

2 голосов
/ 21 марта 2019

Нет разницы между .+ и backticks

Из контекста message равно String. Поэтому используйте кавычки.

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

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

Из-за стиля кода лучше использовать скобки

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

Этот код отлично работает в rb -файле.

Можно сказать, что это не работает в irb. Но irb не является панацеей (например, если вы используете . в начале строки, а не в конце). Поэтому, если вы хотите использовать его в irb, назовите его

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