返回介绍

1.5 类和模块

发布于 2023-05-18 19:12:04 字数 1589 浏览 0 评论 0 收藏 0

能在许多对象之间共享方法定义是件很便利的事。在 Ruby 中我们可以把方法定义放到一个类里,然后通过给那个类发送 new 消息来新建对象。所获得的对象是包括方法在内的这个类的实例。例如:

>> class Calculator
    def divide(x, y)
      x / y
    end
  end
=> nil
>> c = Calculator.new
=> #<Calculator>
>> c.class
=> Calculator
>> c.divide(10, 2)
=> 5

注意,在一个类定义里定义一个方法会把方法添加到那个类的实例里,而不是加到 main 里:

>> divide(10, 2)
NoMethodError: undefined method `divide' for main:Object

一个类可以通过继承来引入另一个类的方法定义:

>> class MultiplyingCalculator < Calculator
    def multiply(x, y)
      x * y
    end
  end
=> nil
>> mc = MultiplyingCalculator.new
=> #<MultiplyingCalculator>
>> mc.class
=> MultiplyingCalculator
>> mc.class.superclass
=> Calculator
>> mc.multiply(10, 2)
=> 20
>> mc.divide(10, 2)
=> 5

子类中的方法可以通过 super 关键字调用超类的同名方法:

>> class BinaryMultiplyingCalculator < MultiplyingCalculator
    def multiply(x, y)
      result = super(x, y)
      result.to_s(2)
    end
  end
=> nil
>> bmc = BinaryMultiplyingCalculator.new
=> #<BinaryMultiplyingCalculator>
>> bmc.multiply(10, 2)
=> "10100"

另一种共享方法定义的方式是在模块(module)中声明它们,这样它们就能被任意类包括进去:

>> module Addition
    def add(x, y)
      x + y
    end
  end
=> nil
>> class AddingCalculator
      include Addition
    end
=> AddingCalculator
>> ac = AddingCalculator.new
=> #<AddingCalculator>
>> ac.add(10, 2)
=> 12

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文