Есть ли способ переопределить метод интерполяции строк по умолчанию в Ruby с помощью метода? - PullRequest
4 голосов
/ 13 марта 2012

Ни to_s, ни to_str, по-видимому, не вызываются при обращении к объекту внутри интерполяции строк в двойных кавычках.Например:

# UPDATE: This example actually works as expected. See update below.
class Foo
  def to_s
   'foo'
  end

  def to_str
    to_s
  end
end

"#{Foo.new}" # result: "#<Foo:0x007fb115c512a0>"

Я не думаю, что есть что-то, что я могу сделать, чтобы получить возвращаемое значение "foo"?

ОБНОВЛЕНИЕ

Извините, но этот код на самом деле работает.Ошибка в другом куске кода.

Ответы [ 2 ]

5 голосов
/ 14 марта 2012

С какой версией Ruby вы видите эти результаты?Это работает правильно для меня с Ruby 1.9.2 и 1.8.6:

class Foo
  def to_s
   'hi mom'
  end
end

puts "#{Foo.new}"
#=> hi mom
4 голосов
/ 13 марта 2012

Вы не возвращаете строку.Удалите puts, поскольку to_s необходимо ВЕРНУТЬ строковое представление, а не выводить его.

Примечание: этот ответ основан на предыдущей версии вопроса, где метод to_s имелкод puts "foo".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...