Ruby中的变量

全局变量  $xx
对象变量 @xx
局部变量 [a-z]xx

常量 [A-Z]xx

两个伪变量self和nil:
self实际上是一个指向当前对象的全局变量,这个变量的值由解释器控制,我们只能读取,不能修改。
nil也是一个由解释器控制全局变量,不能进行赋值。

1. 全局变量 $xx
全局变量应该谨慎使用,因为它的作用域是脚本级,在当前会话中的任何位置都可以改变。
全局变量在初始之前访问的话 是nil
可以通过trace_var来监视全局变量的改变并绑定一个变量改变时做出响应的代码块。
trace_var :$abc, proc{ print   " $abc is now #{$abc.to_s}/n " }

$abc 
=   2
上面就是使用trace_var注册了一个$abc改变时的事件,对于这种作为过程激发器的全局变量在ruby中通常被称为 活动变量 active variable。

还有一个特殊的全局变量,通常是系统变量,表示环境上下文信息的,列举如下
$$ Ruby解释器的进程ID
$! 最近一次错误信息
$@ 错误产生的位置
$_ gets最近读到的字符串
$. 解释器最近读到的行数
$~ 子表达式组的最近一次匹配
$n 最近匹配的第n个子表达式
$= 是否区别大小写的标志
$/ 输入记录分隔符
$/ 输出记录分隔符
$0 Ruby脚本的文件名
$* 命令行参数
$? 最近一次执行的子进程退出状态



2 对象变量 @xx
对象变量的作用域在对象内部,初始之前访问的话,会得到一个nil。
Ruby的对象变量使用之前不用声明,直接使用即可,其实对象变量在第一次使用时被动态添加进对象,看下面的sample就知道了
class  Sample
    
def  setA
        @a 
=   1
    end
    
def  setB
        @b 
=   2
    end
    
def  show
        puts 
" print instance variables: "
        puts self.instance_variables
        puts 
" print end "
    end
end
=  Sample.new
s.show 
# none
s.setA
s.show 
# only have @a
s.setB
s.show 
# only @a and @b


3.局部变量 [a-z_]xx
 由小写字母和下划线开头,在第一次赋值前并不包含nil值,第一次赋值就像是一次类型声明,我想ruby解释器也是根据第一次声明来决定该变量的类型的。

局部变量的作用域是所在上下文


4 ruby的常量 [A-Z]xx

常量只能赋值一次,但Ruby当前版本赋值多次只会产生警告。
常量可以定义在类和模块里,可以通过::符访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值