我认识的Ruby开发者问过这个问题;我的答案如下......还有其他更好的理由吗?
为什么这么多Ruby程序员会这样做
"#{string}"
而不是
string
因为第二种形式更简单,更有效率?
答案 0 :(得分:12)
这是Ruby开发人员的常用习惯吗?我没有那么看。
答案 1 :(得分:3)
当你以后需要做的不仅仅是简单地获取字符串的值,而且在使用点前置/附加它时,更小的变化似乎是我能找到的最好的动机。
答案 2 :(得分:3)
只有一种情况,这是推荐的习语:
fname = 'john'
lname = 'doe'
name = "#{fname} #{lname}"
上面的代码比以下代码更有效:
name = fname + ' ' + lname
或
name = [fname, lname].join(' ')
答案 3 :(得分:2)
某些用法的更广泛背景是什么?除了已经提到的内容之外,我唯一能想到的就是对类型安全的宽松尝试;也就是说,你可以收到任何作为参数的东西,这可以确保你传递的任何东西都像鸭子一样走路......或者,一个字符串(虽然string.to_s
可以说更清晰)。
总的来说,这可能是一种代号味道,一路上有人认为是最佳实践。
答案 4 :(得分:2)
我使用这种代码,因此我可以将nil
作为字符串传递,它仍然可以在字符串上工作,而不是看到一些异常飞行:
def short(string = nil)
"#{string}"[0..7]
end
如果它已经在引号中,那么附加一些调试代码会更容易/更快。
简而言之:它更方便。
答案 5 :(得分:0)
也许这很容易将any转换为字符串?因为它与call to_s
方法相同。但这很奇怪:)。
a = [1,2,3]
"#{a}"
#=> "123"
a.to_s
#=> "123"
答案 6 :(得分:0)
有趣的答案,每个人。我是问原问题的开发人员。为了给出更多的上下文,我偶尔会在当前的工作中看到这一点,有时也会在Rails列表中的示例代码中看到这些变量,这些变量预先知道包含字符串。我可以理解它作为to_s的替代品,但我不认为这是在这里发生的事情;我想如果你只是传递一个字符串变量,人们就会忘记你不需要插值语法。
如果有人试图告诉我这是最好的做法,我会以最快的速度逃跑。
答案 7 :(得分:0)
我可以想象这对于插值对象并不总是String的情况很有用,因为插值隐式调用#to_s
:
"#{'bla'}" => "bla"
"#{%r([a-z])}" => "(?-mix:[a-z])"
"#{{:bla => :blub}}" => "blablub"
在记录某些东西时可能有意义,你不关心输出格式,但由于参数类型错误,从不想要错误。