Ruby中使用yield语句调用block时可以带有参数,参数值见传送个相关联的block。如果传给block的参数是已经存在的局部变量,那么这些变量即为block的参数,他们的值可能会因block的执行而改变。
同样的规则也适用于block内的变量:如果他们第一次出现在block内,那么他们就是block的局部变量。相反,如果他们第一次出现在block外,那么block就与其外部环境共享这些变量。
例如:
- a =[4,2]
- b ='cat'
- c =1
- a.each{|b|
- c = b*a[1]
- d = c+2
- }
- p a =>[4,2]
- p b =>2
- p c =>8
- pdefined?(d)=>nil
b和c都是block外部的局部变量,b作为block的参数,c是block内的变量,block与外部环境共享这些变量,它们的值因block的执行而改变;
d是block内部局部变量,只在block内部有效
以上就是Ruby 局部变量做block参数的详细内容,更多关于Ruby 局部变量做block参数的资料请关注九品源码其它相关文章!