Ruby中 局部变量(local variable) 块变量(block variable) 与块局部变量(block local variable)
2017-11-09 00:00
393 查看
#局部变量与块变量的区别 #块内部的命名空间和与块外部是共享的在块外部定义的局部变量在块中也可以继续使用 #块变量与块外部的变量同名 Ruby会认为他们是两个变量 x, y = 1, 1 #初始化局部变量x y ary = [1, 2, 3] ary.each do |x| #将x做为块变量使用 y = x #将块变量x的值赋给局部变量y end p [x, y] #输出1和3 因为x的值没有发生改变,刚才改变的是块变量x
#当把y注释掉则会报错 NameError #说明在块内部定义的变量不能被外部访问 #所以在块内部给局部变量赋值的时候一定要当心 #块变量只能在块内部使用,不能覆盖外部的局部变量 x = 1 #初始化局部变量x y # y = 1 ary = [1, 2, 3] ary.each do |x| #将x做为块变量使用 y = x #将块变量x的值赋给局部变量y end p [x, y] #输出1和3 因为x的值没有发生改变,刚才改变的是块变量x
#但是Ruby提供了在块内定义局部变量的方法 x, y, z = 0, 0, 0 ary = [1, 2, 3] ary.each do |x; y| #定义块变量x 块局部变量y y = x #对块局部变量y赋值 z = x #对局部变量z赋值 p [x, y, z] end p [x, y, z] #输出[0,0,3] #x输出0同理,y输出零是因为在块中输出的y是块局部变量 #所以实际上局部变量y的值没有改变
总结
1 在块外部定义的局部变量在块内部是可以使用的。但是在块内部定义的变量不能被外部访问。
2 当块变量的名字与局部变量的名字相同时Ruby会认为他们是不同的变量,块变量只能在块内部使用不能覆盖外部的局部变量。
3 Ruby提供了块变量以外的块局部变量。
相关文章推荐
- Ruby 中的各种变量(local/instance/class/global variable and assignment method)
- PHP 全局变量(Global Scope Variable) vs 局部变量(Local Scope Variable)
- Python全局变量global和局部变量 UnboundLocalError: local variable 'x' referenced before assignment
- activiti开发中流程变量中,setVariable和setVariableLocal的区别
- Java_12_变量(variable)_局部变量_实例变量_静态变量_常量_命名规范
- Ruby中全局变量,实例变量,局部变量,类变量,Symbol对比
- iOS开发关于block和局部变量和全局变量
- The final local variable cannot be assigned, since it is defined in an enclosing type的解决办法(把变量从局部编程)
- 【Python基础】之全局变量(UnboundLocalError: local variable referenced before assignment)
- [Ruby笔记]24.Ruby全局变量 $global_variable
- 基本类型的成员变量(attribute)会被自动初始化,但局部变量(variable)就不会被自动初始化。
- C#3.0 隐含类型局部变量(Local Variable Type Inference)
- 全局变量报错:UnboundLocalError: local variable 'l' referenced before assignment
- 全局变量报错:UnboundLocalError: local variable 'l' referenced before assignment
- [导入]How to keep a local variable in scope across a try and catch block?
- 全局变量报错:UnboundLocalError: local variable 'l' referenced before assignment
- 全局变量报错:UnboundLocalError: local variable 'l' referenced before assignment
- 全局变量报错 UnboundLocalError: local variable 'todayPrice' referenced before assignment
- 全局变量报错:UnboundLocalError: local variable 'l' referenced before assignment
- Local variable AND Instance variable / 局部变量 与 实例变量区别