如果你使用过其它语言,你一定知道public,protected,private是什么,在Ruby中所有的方法,如果没有特殊的限制都是public的,类之外的方法Ruby解析为Object对象的private方法,在Ruby中定义方法的可见范围可以通过下面的方式,即区块方式,凡是protect关键字后下面的都是protect方法,private关键字下面的是private方法,public方法放在最上面没有任何关键字修饰。
class Med
def pb
print "Public"
end
protected
def pt1
print "pt1"
end
def pt2
print "pt2"
end
private
def pv1
print "pv1"
end
def pv2
print "pv2"
end
end
m=Med.new
m.pb #public方法可以执行
m.pt1 #这里你会得到NameError的异常
m.pt2 #这里你会得到NameError的异常
m.pv1 #这里你会得到NameError的异常
m.pv2 #这里你会得到NameError的异常
你还可以把方法名的Symbold当作protected或者private的参数的方式来定义方法的可见性:
class Test
def pb
print "Public"
end
def pt
print "Protected"
end
def pv
print "Private"
end
def pv2
print "Private"
end
protected :pt #通过Symbol的方式定义protected方法
private :pv,:pv2
end
t=Test.new
t.pb #这里你会得到NameError的异常
t.pt #这里你会得到NameError的异常
t.pv #这里你会得到NameError的异常
t.pv2 #这里你会得到NameError的异常
有时候我们可能希望让一些public的类方法变成private的那么可以通过private_class_method关键字实现,举个例子,有时候我们希望我们的类实现“单态模式”:
class Test
@@test=nil #声明一个类变量
def pb
print "Public"
end
def pt
print "Protected"
end
def pv
print "Private"
end
def pv2
print "Private"
end
def Test.create #自定义一个“工厂方法” 实现“单态模式”
@@test=new unless @@test
@@test
end
protected :pt #通过Symbol的方式定义protected方法
private :pv,:pv2
private_class_method :new #将默认的new方法变成private
end
t=Test.create #通过自定义方法创建Test对象
t.pb
No comments:
Post a Comment