你知道在ruby 1.8和1.9中使用双引号而不是单引号是否会以任何有意义的方式降低性能吗.

所以如果我打字

question = 'my question'

它比我快吗

question = "my question"

我想象ruby在遇到双引号时,会试图找出是否需要对某个东西进行判断,并且可能会花费一些周期来做这件事.

推荐答案

$ ruby -v
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.0.0]

$ cat benchmark_quotes.rb
# As of Ruby 1.9 Benchmark must be required
require 'benchmark'

n = 1000000
Benchmark.bm(15) do |x|
  x.report("assign single") { n.times do; c = 'a string'; end}
  x.report("assign double") { n.times do; c = "a string"; end}
  x.report("concat single") { n.times do; 'a string ' + 'b string'; end}
  x.report("concat double") { n.times do; "a string " + "b string"; end}
end

$ ruby benchmark_quotes.rb 

                      user     system      total        real
assign single     0.110000   0.000000   0.110000 (  0.116867)
assign double     0.120000   0.000000   0.120000 (  0.116761)
concat single     0.280000   0.000000   0.280000 (  0.276964)
concat double     0.270000   0.000000   0.270000 (  0.278146)

注意:我已经对其进行了更新,使其适用于较新的Ruby版本,并清理了标题,并在更快的系统上运行了基准测试.

这个答案忽略了一些关键点.当使用单引号和双引号时,请特别查看关于interpolation和原因there is no significant difference in performance的其他答案.

Ruby相关问答推荐

ruby 3.1:使用方法(:名称)简化代码莫名其妙地失败

Ruby 中无法解释的撬动行为

将 pp 的结果(或输出到控制台的任何内容)放入字符串

我可以在 Ruby 的 heredoc 中访问变量吗?

Ruby 是否提供了一种使用指定编码执行 File.read() 的方法?

如何打开(读写)或创建允许截断的文件?

如何在不将换行符粘贴到字符串中的情况下使用puts添加额外的换行符?

Ruby gem 权限被拒绝 /var/lib/gems 使用 Ubuntu

Ruby:将unix时间戳转换为日期

Encoding::UndefinedConversionError

VCRProxy:在 Capybara 内使用 VCR 记录 PhantomJS ajax 调用

如何绘制 git repo 的代码行历史记录?

如何在Ruby中获取终端窗口的宽度

如何删除Ruby中数组中满足条件的所有元素?

在 ruby​​ 异常中捕获行号

Ruby 中 Array#reject 的反义词是什么?

如何设置方法测试中使用的私有实例变量?

如何在 Ruby 中创建可重用的块/proc/lambda?

Ruby哈希中的条件键/值

Ruby 中的 to_s 与 to_str(以及 to_i/to_a/to_h 与 to_int/to_ary/to_hash)