Посмотрите на это по отдельности:
names << "#{name}" + " Test " + "#{target}"
Это действительно неправильный код."#{name}"
будет эквивалентно name
, если это строковое значение, поэтому кавычки посторонние, и, что еще хуже, создайте еще одну строку, которая будет немедленно выброшена.Эта одна строка создает только четыре строки.
Другая лучше:
names << "#{name} Test #{target}"
Это создает одну строку и вставляет ее.Интерполяция почти всегда лучше конкатенации, потому что она создает меньше мусора.
Ваш irb
тест имеет недостатки:
"#{name}" + " Test " + "#{target}".eql?("#{name} Test #{target}") ? "equal" : "not"
Это сначала оценивает .eql?
часть на just target
, который явно не совпадает, поэтому он оценивается как:
("#{name}" + " Test " + false) ? "equal" : "not"
Что не получится, потому что вы не можете объединить false
и строку.
Чтобы проверить это, нужно вызвать определенный порядок оценки:
("#{name}" + " Test " + "#{target}").eql?("#{name} Test #{target}") ? "equal" : "not"