0

ルビーハッシュを出力しようとしています:

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

出力を

one=1
two=1
three=0

これは、Ruby 1.8.7 を実行する 1 台のマシンでこのコードを使用すると問題なく動作します。

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

しかし、ルビー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.9で動作Array.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 に答える