使用Ruby进行不一致的打印

时间:2013-07-31 20:34:07

标签: ruby

我正在尝试打印ruby哈希:

opts = {
  'one' => '1',
  'two' => '1',
  'three' => '0'
}

我希望输出为

one=1
two=1
three=0

这个代码在运行ruby 1.8.7

的一台机器上运行良好
print opts.map{|k,v| k + '=' + v + "\n"}.to_s

但是在另一台运行ruby 1.9的机器上,它会打印

["one=1\n", "two=1\n", "three=0\n"]

出了什么问题?

3 个答案:

答案 0 :(得分:5)

尝试

print opts.map{|k,v| k + '=' + v + "\n"}.join

解释很简单:使用ruby 1.9 Array.to_s changed它的行为。

替代方案:

puts opts.map{|k,v| k + '=' + v }.join("\n")

puts opts.map{|k,v| "#{k}=#{v}" }.join("\n")

我更愿意:

opts.each{|k,v| puts "#{k}=#{v}" }

另一个版本,但又看了一眼:

opts.each{|k,v| puts "%-10s= %s" % [k,v]}

结果是:

one       = 1
two       = 1
three     = 0

(但键不应超过%-10s中的长度。)

答案 1 :(得分:4)

它按预期工作。试一试:

a={:one=>1, :two=>2, :three=>3}
a.each {|k,v| puts "#{k}=>#{v}" }

答案 2 :(得分:1)

尝试:

res = ""
opts.map{|k,v| res += k + '=' + v + "\n"}
puts res