13 - creating an abstract method.rb

来自「O Reilly Ruby Cookbook source code」· RB 代码 · 共 92 行

RB
92
字号
class Shape2D  def area    raise NotImplementedError.      new("#{self.class.name}#area is an abstract method.")  endendShape2D.new.area# NotImplementedError: Shape2D#area is an abstract method.#---class Square < Shape2D  def initialize(length)    @length = length  end  def area    @length ** 2  endendSquare.new(10).area                              # => 100#---class Shape2D  def initialize    raise NotImplementedError.      new("#{self.class.name} is an abstract class.")  endendShape2D.new# NotImplementedError: Shape2D is an abstract class.#---class Class  def abstract(*args)    args.each do |method_name|      define_method(method_name) do |*args|        if method_name == :initialize          msg = "#{self.class.name} is an abstract class."        else          msg = "#{self.class.name}##{method_name} is an abstract method."        end        raise NotImplementedError.new(msg)     end    end  endend#---class Animal  abstract :initialize, :moveendAnimal.new# NotImplementedError: Animal is an abstract class.#---class Sponge < Animal  def initialize    @type = :Sponge  endendsponge = Sponge.newsponge.move# NotImplementedError: Sponge#move is an abstract method.#---class Cheetah < Animal  def initialize    @type = :Cheetah  end  def move    "Running!"  endendCheetah.new.move# => "Running!"#---class Sponge  def move    "Floating on ocean currents!"  endendsponge.move# => "Floating on ocean currents!"#---

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?