• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Ruby之旅(15)Ruby中的三种变量一种常量和两个伪变量

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
全局变量  $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当前版本赋值多次只会产生警告。
常量可以定义在类和模块里,可以通过::符访问

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
centos6.x安装rvm配置Ruby开发环境发布时间:2022-07-14
下一篇:
Ubuntu下安装Ruby,Rails运行环境发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap