Eloquent Ruby 读书笔记 续_Ruby_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > Ruby > Eloquent Ruby 读书笔记 续

Eloquent Ruby 读书笔记 续

 2012/2/28 18:01:52  夜鸣猪  程序员俱乐部  我要评论(0)
  • 摘要:运算符重载和Ruby风格的运算符重载程序大概意思是,重新定义,文件类的比较方法。只要目录和文件名一样,就说这两个文件类一样。ruby的classDocumentPointerattr_reader:folder,:namedefinitialize(folder,name)@folder=folder@name=nameenddef==(other)returntrueifother.equal?(self)returnfalseunlessother.instance_of?(self
  • 标签:笔记 读书笔记 Ruby
运算符重载和Ruby风格的运算符重载
程序大概意思是,重新定义,文件类的比较方法。只要目录和文件名一样,就说这两个文件类一样。ruby的
class DocumentPointer
  attr_reader :folder, :name
  def initialize( folder, name )
    @folder = folder
    @name = name
  end
  def ==(other)
    return true if other.equal?(self)
    return false unless other.instance_of?(self.class)
    folder == other.folder && name == other.name
  end
end


class DocumentPointer
  attr_reader :folder, :name
  def initialize( folder, name )
    @folder = folder
    @name = name
  end
  def ==(other)
    return false unless other.respond_to?(:folder)
    return false unless other.respond_to?(:name)
    folder == other.folder && name == other.name
  end
end


当我们用的时候
#Asymmetry
class ContractIdentifier < DocumentIdentifier
end

doc_id = DocumentIdentifier.new( 'contracts', 'Book Deal' )
con_id = ContractIdentifier.new( 'contracts', 'Book Deal' )

puts "They are equal!" if doc_id == con_id


会出现子类没有父类方法的问题,在contractIdentifier里没有重载caozuofu.html" target="_blank">操作符。那么

class VersionedIdentifier < DocumentIdentifier
  attr_reader :version

  def initialize(folder, name, version)
    super(folder, name)
    Well-Behaved Equality 147
    @version = version
  end

  def ==(other)
    if other.instance_of? VersionedIdentifier
      other.folder == folder &&
      other.name == name &&
      other.version == version
    elsif other.instance_of? DocumentIdentifier
      other.folder == folder && other.name == name
    else
      false
    end
  end
end

发表评论
用户名: 匿名