美文网首页
Ruby 扩展类 + 继承

Ruby 扩展类 + 继承

作者: changsanjiang | 来源:发表于2017-10-21 19:39 被阅读141次

扩展类

Ruby 允许我们在已经定义好的类中添加方法. 我们来试试给 String 类添加一个计算字符串单词数的实例方法 count_word.

class String
    def count_word
        ary = self.split(/\s+/) # 用空格分割self
        # 分解成数组
        # 返回分给后的数组的元素总数
        return ary.size
    end
end

str = "Just Another Ruby Newbie"

p str.count_word  #=> 4


继承

利用继承, 我们可以在不修改已有类的前提下, 通过增加新功能 或 重定义已有功能等来创建新的类.

要定义继承, 可以使用 class 语句指定类名的同时指定父类名.

class 类名 < 父类名
  类定义
end

这里我们创建一个继承了 Array 类的 RingAarry 类.

class RingArray < Array    # 指定父类
  def [](i)        # 重定义运算符`[]`
    idx = i % size  # 取余, 防止溢出计算新索引值,
    super(idx)  # 调用父类中同名的方法
  end
end

wday = RingArray["日", "月", "火", "水", "木", "金", "土"]
p wday[6] #=> "土"
p wday[11] #=> "木"
p wday[-1]#=> "土"

利用继承, 我们可以把共同的功能定义在父类, 把各自独有的功能定义在子类.
定义类时, 没有指定父类的情况下, Ruby 会默认该类为 Object 类的子类.
Object 提供了很多便于实际编程的方法. 但在某些情况下, 我们也有可能希望使用轻量级的类, 而这时就可以使用 BasicObject 类.
BasicObject 类只提供了作为 Ruby 对象的最低限度的方法. 类对象调用 instance_methods 方法后, 就会以符号的形式返回该类实例方法列表.

>> BasicObject.instance_methods
=> [:!, :==, :!=, :__send__, :equal?, :instance_eval, :instance_exec, :__id__]

>> Object.instance_methods
=> [:instance_of?, :public_send, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :private_methods, :kind_of?, :instance_variables, :tap, :define_singleton_method, :is_a?, :public_method, :extend, :singleton_method, :to_enum, :enum_for, :<=>, :===, :=~, :!~, :eql?, :respond_to?, :freeze, :inspect, :display, :object_id, :send, :to_s, :method, :nil?, :hash, :class, :singleton_class, :clone, :dup, :itself, :taint, :tainted?, :untaint, :untrust, :trust, :untrusted?, :methods, :protected_methods, :frozen?, :public_methods, :singleton_methods, :!, :==, :!=, :__send__, :equal?, :instance_eval, :instance_exec, :__id__]

相关文章

  • Ruby 扩展类 + 继承

    扩展类 Ruby 允许我们在已经定义好的类中添加方法. 我们来试试给 String 类添加一个计算字符串单词数的实...

  • Ruby中的Module

    Ruby中没有Java语言中的interface,Ruby只支持单继承。Ruby通过Mix-in提供对类的扩展,其...

  • android巩固-kotlin第二篇

    类和对象 继承 接口 扩展 数据类和密封类

  • swift3.0-继承、构造、类扩展

    Swift3.0-继承、构造、类扩展继承(inherit) 单向关系1、定义:某个类通过继承语法而获取另一个类...

  • Ruby 类的继承关系

  • 2019-03-26

    1 .继承得主要目的就是扩展类的功能: 类的继承格式:Java中使用extends关键字来实现类类的继承 exte...

  • c# class 继承

    继承 一个类可以继承另一个类,从而对原有类进行扩展和自定义 可以叫做父类和子类 继承的类让你可以重用被继承类的功能...

  • Java面向对象 基础知识(二)

    继承的实现:继承是用来扩展父类的功能,用extend关键字来完成继承格式:class 子类 extends 父类 ...

  • 7-继承是什么?扩展一个类的方式用继承好还是分类好?为什么?

    继承是用来描述类与类之间的关系的。子类继承于父类,拥有父类的属性和方法。 扩展一个类用Category好。继承会破...

  • 2021-04-22

    类别 扩展 继承 继承:一个类(子类)继承于另一个类(父类),那么子类不仅拥有父类所有的属性和方法,而且可以创建属...

网友评论

      本文标题:Ruby 扩展类 + 继承

      本文链接:https://www.haomeiwen.com/subject/hkjiuxtx.html