您知道在 ruby 中使用双引号代替单引号是否会以任何有意义的方式降低 ruby 1.8 和 1.9 中的性能吗?
所以如果我输入
question = 'my question'
它比更快吗
question = "my question"
我想象 ruby 试图弄清楚当遇到双引号时是否需要评估某些内容,并且可能会花费一些周期来执行此操作。
Summary:无速度差异;这很棒的协作 Ruby 风格指南建议保持一致。我现在用'string'
除非需要插值(指南中的选项 A)并且喜欢它,但您通常会看到更多代码"string"
.
Details:
从理论上讲,当您的代码是parsed,但您不仅不应该关心一般的解析时间(与执行时间相比可以忽略不计),而且在这种情况下您将无法发现显着差异。
重要的是,什么时候得到executed这将是一模一样.
对此进行基准测试仅表明缺乏对 Ruby 工作原理的理解。在这两种情况下,字符串都会被解析为tSTRING_CONTENT
(see 来源在parse.y)。换句话说,CPU在创建时会经历完全相同的操作'string'
or "string"
。完全相同的位将以完全相同的方式翻转。对此进行基准测试只会显示不显着的差异以及由于其他因素(GC 启动等)造成的差异;请记住,在这种情况下没有任何区别!像这样的微观基准很难得到正确的结果。看看我的宝石fruity一个像样的工具。
请注意,如果有形式的插值"...#{...}..."
,这被解析为tSTRING_DBEG
, 一堆tSTRING_DVAR
对于每个表达式#{...}
和决赛tSTRING_DEND
。但这只是在有插值的情况下,这不是OP的目的。
我曾经建议你在任何地方都使用双引号(这样更容易实际添加#{some_var}
稍后),但我现在使用单引号,除非我需要插值,\n
等等...我喜欢它的视觉效果,而且它稍微更明确,因为不需要解析字符串来查看它是否包含任何表达式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)