Sunday, 16 October 2011

Note FOR Ruby 1.9 (3)

14.Ruby之Method:
类方法:def <CLASSNAME>.<classMethodName>
Ruby中类除了类变量外,还可以拥有类实例变量:
class MyClass
     @@classvar = 1000
     @instvar = 1000

     def MyClass.classMethod
         puts "@@classvar = #{@@classvar}, @instvar = #{@instvar}"
     end

     def instanceMethod
         puts "@instvar = #{@instvar}"
     end
end

myclass = MyClass.new
MyClass.classMethod
myclass.instanceMethod

*可以使用instance_get_variable方法获取变量值
*在Ruby中类也是一个对象,其是Class类的实例.
*Ruby中new方法为类方法,其创建一个对象并调用initialize类实例方法初始化.

15.Ruby之Singleton方法:
Singleton方法是指一个方法只属于一个类实例,而不属于整个类,所以在Ruby中类库中有很多Singleton,因为每个类都是Class类的实例:
p IO.singleton_methods
定义一个singleton方法:
def myclass.objectMethod
end

查看对象是否拥有某个singleton方法可以调用respond_to?(:Symbol)

Singleton类:
其定义为定义一个类对象的类:
ob = Object.new

class << ob
     def blather(aStr)
         puts "blather #{aStr}"
     end
end


Singleton类方法:
class MyClass
     class << self
         def methodA
         end
     end
end

class << MyClass
     def methodB
     end
end

p MyClass.singleton_methods


16.Ruby之public,private,protected:
public, private, protected是Module类的方法
class MyClass
     private
         def priv
         end

     protected
         def prot
         end

     public
         def pub
         end

     def useOb(anOb)
         anOb.pub
         anOb.prot
         #anOb.priv
     end
end

myclass1 = MyClass.new
myclass2 = MyClass.new
#myclass1.priv
#myclass1.prot
myclass1.pub
myclass1.useOb(myclass2)

protected的作用是对在相同类型的对象2在对象1的作用域范围内是可见的,在继承关系链中同样适用
虽然private方法在外部不能调用,但是可以用send方式:
class X
     private
         def priv
         end
end

ob = X.new
ob.send(:priv)


17.Ruby之内部方法
class X
     def x
         def y
         end
     end
end

ob = X.new
#ob.y
ob.x
ob.y

直接调用内部方法会出错,但是如果调用过一个方法其包含内部方法,则会将其内部方法暴露到外部作用域

18.Ruby之不定参数:
def aMethod(a = 10, *b)
     return a, b
end

p aMethod(1, 2, 3, 4)


19.Ruby之特殊的整数:
Ruby中每个字符串和浮点数都是不同的对象,例如:a = "hello" b = "he" + "llo" 其中a和b是不同的对象,然而对于整数,对同一个整数而言,它们是相同的对象: a = 10 b = 8 c = b + 2 其中a和c指向同一对象
Ruby中以!号结尾的方法(包括<<字符串连接)会改变对象本身,否则返回一个新的对象

20.Ruby之拷贝和引用:
equal?用来判断是否同一对象
在Ruby核心模块中==用来判断是否为同一对象,但在一些类中被重写,例如String.

No comments :

Post a Comment