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