icon Ruby 练习问题集

重构(1)

有如下定义的类 Bird, Crow, Duck

require 'digest/md5'

class Bird
  attr_accessor :name

  private
  def digest(food)
    d = Digest::MD5.new
    d << food
    d << name
    d.hexdigest
  end
end

class Crow < Bird
  def eat(food)
    if food.kind_of?(String) && food.match(/^edible:/)
      digest(food.reverse)
    else
      food
    end
  end
end

class Duck < Bird
  def eat(food)
    if food.kind_of?(String) && food.match(/^edible:/)
      digest(food.upcase)
    else
      food
    end
  end
end

CrowDuckeat 方法基本相同。

为了尽量减少两个 eat 方法间的冗长性,请修改源代码。

--

黒田努


答案与说明的显示・隐藏

(2008/12/15)