ruby08

来源:互联网 发布:颈椎牵引 知乎 编辑:程序博客网 时间:2024/06/08 03:33

类与模块

关于类

1、要想建立新的对象,必须使用每个类的new方法ary = Array.new方法可以建立一个新的数组对象;也可以ary=[]p ary.class #=>Array  .class可以看这个对象属于哪一个类判断一个对象是否属于某个类 ary.instanceof?(Array) #=>true子类和父类之间的关系是is-a2、定义一个类class Hello    def initialize(myname = "ruby")//参数默认可以更改        @name = myname    end    def hello        print "hello ",@name    endend 3、访问方法给@name设置访问和更改的方法def name    return @nameenddef name=(value)    @name = valueend但实际开发中,由于这样写极易出现错误,所以ruby提可以快速定义这些方法的东西:attr_reader、attr_writer、attr_accessor(写入以及读取的方法都定义)上边麻烦的一堆代码就可以定义成attr_accessor:name类似于Java中的setter和getter方法3、类方法的定义def 类名.方法名    执行的代码enddef self.方法名//只能在类中定义    执行的代码endclass << 类名    def 方法名        执行的代码    end end第一种比较明确,所以用的最多类方法的表示常采用的方法:类名.方法   类名::方法经常使用::连接类中的常数和类名类变量@@变量名,可以直接使用4、关于继承class 类名 < 父类名    定义end可以使用super调用父类中同名的方法5、设定方法的访问限制public  private  protectedeg:    public:方法名也可以    public        下边的方法都是public也可以设置attr_accessor的name或者name=方法

Duck Typing(行为决定类型)

鸭子定型原则
对象的特征并不是依照其实际的种类,而是依照该对象具有什么行为方法来决定的

关于模块module

与类类似,但是模块不能建立实例,也不能继承
通过 模块名.类名 的方式调用
eg: Math::PI
也可以先include Math 再直接使用PI

可以以Mix-in将模块混进类里,在类的定义内使用include,可以将模块里所定义的方法与常数纳入类定义里

自己定义模块,与类相似 module 模块名 ~ end

如果想将方法对模块外部公开,必须使用module_function:方法名

原创粉丝点击