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
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里没有重载操作符。那么


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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值