Chinaunix首页 | 论坛 | 博客
  • 博客访问: 58827
  • 博文数量: 16
  • 博客积分: 318
  • 博客等级: 一等列兵
  • 技术积分: 131
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-02 10:43
文章分类

全部博文(16)

文章存档

2011年(16)

我的朋友

分类: Python/Ruby

2011-03-09 21:31:39

3.6符号
通过在一个标识符或字符串的前面加上冒号来表示一个符号字面量,两个拥有相同内容

的字符串都会转换成同一个Symbol对象,两个不同的Symbol对象将总是含有不同的内容

。当你使用字符串的目的在于将其作为一种独一无二的标识符,而不在于它们文本内容

时,请使用符号。


查看某个对象是否包含某方法,比如each
someObject.respond_to?:each  //respond_to?:each 之间是没有空格的

irb(main):001:0> a=[1,2,3,4]
=> [1, 2, 3, 4]
irb(main):007:0> a.respond_to?:each
=> true

3.7
True、False是布尔值,Nil表示没有值,
o==nil
o.nil?   //检查一个对象是否为Nil

irb(main):025:0> a=String.new
=> ""
irb(main):026:0> a.nil?
=> false

3.8
对象
Ruby没有基本类型,所有的值都是对象,都继承一个Object类。
3.8.1
对象引用
给一个变量赋值,是在此变量存储一个指向值(对象)的引用,当把一个对象传递给一

个方法时,传递的是该对象的引用,方法可以利用这些引用修改底层的对象。

irb(main):027:0> s = "Ruby"
=> "Ruby"
irb(main):028:0> t = s
=> "Ruby"
irb(main):029:0> t[-1] = ""
=> ""
irb(main):030:0> print s
Rub=> nil
irb(main):031:0> print t
Rub=> nil
irb(main):032:0> t = "Java"
=> "Java"
irb(main):033:0> print s
Rub=> nil
irb(main):034:0> print t
Java=> nil
irb(main):035:0> print s,t
RubJava=> nil

3.8.1.1
立即值,Fixnum和Symbol对象实际上是“立即值”而非引用值。
3.8.2
对象生命周期
myObject=myClass.new
Ruby不须要显式释放对象,而是自动销毁那些不再需要的对象。

3.8.3
对象标识
对象的标识符是一个Fixnum,可以通过object_id方法或__id__ (注,id前后是两个下

模线)来获取。

irb(main):037:0> puts s.object_id
21375696
irb(main):040:0> puts s.__id__
21375696

3.8.4
对象的类和对象的类型
o = "test"
o.class  //返回对象的类型
o.class.superclass  //父类(超类)
o.calss.superclass.superclass //

irb(main):041:0> s.class
=> String
irb(main):042:0> s.class.superclass
=> Object
irb(main):043:0> s.class.superclass.superclass
=> BasicObject
irb(main):044:0> s.class.superclass.superclass.superclass
=> nil

 

irb(main):048:0> s.class == String
=> true
或者
irb(main):047:0> s.instance_of?String
=> true
irb(main):049:0> s.is_a?String
=> true

3.8.5对象的相等性
equal?方法由object定义,用于测试两个值是否引用了同一个对象。
a = "Ruby"
b = c = "Ruby"
a.equal?(b)  //false
b.equal?(c)  //true

rb(main):063:0> a = "Ruby"
> "Ruby"
rb(main):064:0> b = c = "Ruby"
> "Ruby"
rb(main):065:0> a.equal?b
> false
rb(main):066:0> a.equal?c
> false
rb(main):067:0> b.equal?c

也可以这样比较两个对象是否是同一个对象
a.object_id == b.object_id


==操作符,值之间的相等性是通过==操作符来测试的。
a = "Ruby"
b = "Ruby"
a.equal?b //false
a == b //ture

阅读(1701) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~