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

Ruby变量

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

每个变量保存一个对象的引用。

person = "Tim"

person.object_id       ->938678

person.class             ->String

person                     ->"Tim"

第一行代码,Ruby使用值“Tim”创建了一个String对象。这个对象的一个引用(reference)被保存在局部变量person中。接下去的快速检查展示了变量具备字符串的特性,它具有对象的ID,类和值。

那么,变量是一个对象吗?在Ruby中,答案是“不”,变量只是对象的引用。对象漂浮在某处一个很大的池中(大多数时候是堆,即heap中),并由变量指向它们。

person1 ="Tim"

person2 =person1

person1[0] = 'J'

person1                ->"Jim"

person2                ->"Jim"

我们改变了person1的第一个字符,但是person1和person2都从“Tim”改为了“Jim”.

这都归结于变量保存的是对象引用而非对象本身这一事实。将person1赋值给person2并不会创建任何新的对象;它只是将person1的对象引用拷贝给person2,因此person1和person2都指向同一个对象。

赋值别名(alias)对象,潜在地给了你引用同一对象的多个变量。你可以通过使用String的dup方法来避免创建别名,它会创建一个新的、具有相同内容的String对象。

View Code
1 person1 = "Tim"
2 person2 = person1.dup
3 person1[0] = "J"
4 person1              ->"Jim"
5 person2              ->"Tim"

你可以通过冻结一个对象来阻止其他人对其进行改动。试图更改一个被冻结的对象,Ruby将引发(raise)一个TypeError异常。

person1 = "Tim"
person2 = person1
person1.freeze   #prevent modifications to the object
person2[0] ="J"

 输出结果:

prog.rb:4:in '[]=':can't modify frozen string (TypeError)
from prog.rb.4

 在Ruby中操作的任何东西都是一个对象。

 


鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
Ruby日文手册翻译2发布时间:2022-07-13
下一篇:
linux编译ruby1.8.7出现OPENSSL错误发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

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

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

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