被你一说我也有点晕了哈。 ary.each do |x, y|我是理解的,前面也写过,这是两个块变量了,但ary.each只能给一个块变量赋值,所以b的值会成nil。(143页,代码11.9解释过这个,144页原话,“块变量比较多时,多出来的块变量值为nil)。 ary.each do |x; y| 和 ary.each do |x, y| 执行结果确实都是一样的,在这个例子中确实看不出来两者的区别,这还是因为ary.each只能给一个块变量赋值。但只要一个调用方法,比如hash的each方法,就能看出区别来了。我贴一段程序示例,看看能不能放下: x = y = z = 0 hsh = {"a" => 1, "b" => 2, "c" => 3} hsh.each do |x; y| p x puts y y = x z = x s = x p [x, y, z, s] end puts p [x, y, z]
格式丢了,没办法,凑活看吧。在这个例子里,如果是hsh.each do |x,y|和hsh.each do |x; y|,结果会不一样。前者的block里面,因为x和y是两个块变量,x会赋值为各个key (”a“,"b","c"),y会赋值为各个value (1,2,3),而后者里面,只有x一个是块变量,而y是”块局部变量“,因此hsh.each方法会调用只有一个参数的方法,即给块变量x赋值为[key,value]数组,而y作为块局部变量,在block里的初始值为nil。而无论y是块变量还是块局部变量,都不会影响到block外面的y值。
a=b=c=0
ary = [1, 2, 3]
ary.each do |a; b|
b = a
c = a
p [a, b, c]
end
puts
p [a,b,c]
第3行演示在块变量后面加“;”号来定义块变量,与不加没啥区别啊,这是讲的啥意思呢
已经买了几本。等待电子板中...