Почему "# {String}" - распространенная идиома в Ruby - PullRequest
2 голосов
/ 11 мая 2010

Знающий Ruby-разработчик спросил меня; мой ответ ниже ... Есть ли другие, более веские причины?

Почему так много программистов на Ruby делают

"#{string}"

вместо

string

так как вторая форма проще и эффективнее?

Ответы [ 8 ]

12 голосов
/ 11 мая 2010

Это распространенная идиома для разработчиков на Ruby? Я не так много это вижу.

3 голосов
/ 22 августа 2010

Существует только один случай, когда это рекомендуемая идиома:

fname = 'john'
lname  = 'doe' 
name = "#{fname} #{lname}"

Код выше более эффективен, чем:

name = fname + ' ' + lname

или

name = [fname, lname].join(' ')
3 голосов
/ 11 мая 2010

Меньшие изменения, когда вам позже нужно сделать больше, чем просто получить значение строки, но также добавление / добавление к ней в точке использования, кажется, лучшая мотивация, которую я могу найти для этой идиомы.

2 голосов
/ 07 августа 2012

Я использую этот вид кода, чтобы я мог передать nil в виде строки, и он все равно будет работать со строкой, вместо того, чтобы видеть некоторые исключения:

def short(string = nil)
  "#{string}"[0..7]
end

И легче / быстрее добавлять некоторый отладочный код, если он уже в кавычках.

Итак, вкратце: это удобнее.

2 голосов
/ 11 мая 2010

Каков более широкий контекст некоторых употреблений?Единственное, что я могу придумать, помимо того, что уже было упомянуто, - это свободная попытка безопасности типов;то есть вы можете получить что-либо в качестве аргумента, и это может гарантировать, что все, что вы проходите в прогулке, как утка ... или, ну, в общем, строка (хотя string.to_s, возможно, будет более ясным).В общем, это, вероятно, запах кода, который кто-то на этом пути считал передовой практикой.

0 голосов
/ 13 октября 2011

Я мог бы представить, что это полезно в тех случаях, когда интерполируемый объект не всегда является строкой, поскольку интерполяция неявно вызывает #to_s:

"#{'bla'}"           => "bla"
"#{%r([a-z])}"       => "(?-mix:[a-z])"
"#{{:bla => :blub}}" => "blablub"

Может иметь смысл при регистрации чего-либо, когда вы не заботитесь о формате вывода, но никогда не хотите ошибки из-за неправильного типа аргумента.

0 голосов
/ 11 мая 2010

Интересные ответы, все. Я разработчик, который задал оригинальный вопрос. Чтобы дать больше контекста, я иногда вижу это в моей текущей работе, а также иногда в примере кода в списке Rails, с переменными, о которых известно, что они содержат строки. Я мог бы понять это как замену to_s, но я не думаю, что это происходит здесь; Я думаю, что люди просто забывают, что вам не нужен синтаксис интерполяции, если вы просто передаете строковую переменную.

Если бы кто-нибудь попытался сказать мне, что это лучшая практика, я бы сбежал с максимальной скоростью.

0 голосов
/ 11 мая 2010

может быть, это простой способ преобразовать любой в строку? Потому что это то же самое, что вызов метода to_s. Но это довольно странный способ:).

a = [1,2,3]
"#{a}"
#=> "123"
a.to_s
#=> "123"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...