0

我正在尝试打印一个红宝石哈希:

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"]

出了什么问题?

4

3 回答 3

5

尝试

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

解释很简单:Ruby 1.9Array.to_s改变了它的行为。

替代:

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.)

于 2013-07-31T20:37:23.727 回答
4

它按预期工作。试试这个:

a={:one=>1, :two=>2, :three=>3}
a.each {|k,v| puts "#{k}=>#{v}" }
于 2013-07-31T20:37:01.400 回答
1

尝试:

res = ""
opts.map{|k,v| res += k + '=' + v + "\n"}
puts res
于 2013-07-31T20:36:26.177 回答