你可以很容易地看到发生了什么事情,如果你提取插值部分成一个变量:
alfawit = ("a".."z")
foo = alfawit.each { |litera| puts litera }
puts "That's an alphabet: \n\n #{ foo } "
第二行导致出现问题:each
为该范围内的每个元素调用块,然后返回接收方,以使foo
变为alfawit
。
这里的另一种方式来获得期望的结果:
alfawit = "a".."z"
puts "That's an alphabet:", alfawit.to_a
puts
输出一个新行各的说法,但对于数组参数,它在新行各元素输出。结果:
That's an alphabet:
a
b
c
⋮
x
y
z
同样,你可以把范围为argument list通过*
:
alfawit = "a".."z"
puts "That's an alphabet:", *alfawit
这相当于:
puts "That's an alphabet:", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"
什么是你预期的结果? – Stefan
在“这是一个字母表”之后列出字母表,就像Ursus正确完成的那样。我曾认为我能够按照自己的方式嵌套迭代。 – Michalko