ruby将我的输出射到了不知不觉的分界线上

时间:2014-06-04 22:22:25

标签: ruby arrays string-formatting

我已经编写了一个骰子滚动程序,既可以节省模具的侧面数量,也可以节省模具的滚动次数。当我尝试输出两个碎片时,红宝石决定将这两个碎片扔到不同的线上。为什么写作时:

what_has_rolled.zip(how_many_sides) do |die, sides| print "Your d#{sides} rolled a #{die}" end

我的输出看起来像是:

你的d6滚了一下 你的d5滚了一下 你的d4滚了一下 你滚了4周 你滚了1 你滚了3个

而不是:

你的d6滚了4 你的d5滚了1 你的d4滚了3个

如何编写它以便正确打印?

1 个答案:

答案 0 :(得分:1)

我怀疑您how_many_sides的长度比what_has_rolled的长度短。例如,我可以像这样重现上面的输出:

how_many_sides = [6,5,4]    
what_has_rolled = [nil,nil,nil,4,1,3]
what_has_rolled.zip(how_many_sides) do |die, sides| puts "Your d#{sides} rolled a #{die}" end

给出了与你相同的输出:

Your d6 rolled a 
Your d5 rolled a 
Your d4 rolled a 
Your d rolled a 4
Your d rolled a 1
Your d rolled a 3

这是因为当Array.zip的参数比调用方法的数组的长度短时,会追加nil

> what_has_rolled.zip(how_many_sides)
=> [[nil, 6], [nil, 5], [nil, 4], [4, nil], [1, nil], [3, nil]]

要获得所需的输出,您需要确保what_has_rolledhow_many_sides的长度均为3.例如:

what_has_rolled = [4,1,3]
how_many_sides = [6,5,4]
what_has_rolled.zip(how_many_sides) do |die, sides| puts "Your d#{sides} rolled a #{die}" end

给出所需的输出。