我正在尝试打印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"]
出了什么问题?
答案 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