能在许多对象之间共享方法定义是件很便利的事。在 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
计算的本质——1.5 类和模块
书名: 计算的本质
作者: [英] Tom Stuart
出版社: 人民邮电出版社
原作名: Understanding Computation: From Simple Machines to Impossible Programs
副标题: 深入剖析程序和计算机
译者: 张伟
出版年: 2014-11
页数: 300
定价: 69.00元
装帧: 平装
ISBN: 9787115361547