首页 » Ruby » ruby08

ruby08

原文 http://blog.csdn.net/hmyixiu/article/details/76599608

2017-08-03 00:20:09阅读(332)

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

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

关于模块module

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

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

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

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

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹