Eloquent 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  endend
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  endend

当我们用的时候

#Asymmetryclass ContractIdentifier < DocumentIdentifierenddoc_id = DocumentIdentifier.new( 'contracts', 'Book Deal' )con_id = ContractIdentifier.new( 'contracts', 'Book Deal' )puts "They are equal!" if doc_id == con_id

会出现子类没有父类方法的问题,在contractIdentifier里没有重载操作符。那么

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  endend

想想我的影子,我会在你身后给你一个拥抱;

Eloquent Ruby 读书笔记 续

相关文章:

你感兴趣的文章:

标签云: