文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
1.5 类和模块
能在许多对象之间共享方法定义是件很便利的事。在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论