类方法: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