Строки в формате Ruby и интерполированные строки идентичны по поведению? - PullRequest
1 голос
/ 28 апреля 2010

Действуют ли следующие две строки кода одинаково, несмотря на немного отличающиеся реализации

values.map{ |k,v| __send__('%s=' % k.to_s, v) }
values.map{ |k,v| __send__("#{k.to_s}=", v) }

Вторая строка будет более распространенной идиомой ruby, поэтому мне было интересно, почему был использован другой метод, когда он был в Rails Core, и я ожидал использовать идиоматический ruby.

1 Ответ

2 голосов
/ 28 апреля 2010

Они не абсолютно идентичны. Например, первый пример будет вызывать String#%, поэтому, если этот метод переопределен по какой-то странной причине, вы можете получить другой результат. При стандартном определении String#% вычисленные строки будут одинаковыми, поэтому оба выражения будут иметь одинаковый результат.

Кстати, в этом примере to_s не требуется, и предполагается, что send не было переопределено (и, следовательно, эквивалентно __send__):

values.map{ |k,v| send("#{k}=", v) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...