我想在Ruby中實現一個可與任何Fixnum,(反之亦然)進行比較的類(使用<=>
運算符)。這將最終在一個範圍內使用。這裏是我班的輪廓:Ruby對象與Fixnum類似
class N
include Comparable
attr :offset
def initialize(offset = 0)
@offset = offset
end
def succ
N.new(@offset + 1)
end
def +(offset)
N.new(@offset + offset)
end
def <=>(other)
return @offset <=> other.offset if other.kind_of? N
return 1 # N is greater than everything else
end
end
def n; N.new(0); end
現在1..n
在n..n+2
和n..999
使用時,但不是這樣的偉大工程。這是由於n <=> 1
工作,但1 <=> n
沒有(返回無)。
有沒有什麼辦法可以讓Fixnum把我的N類當作可比對象?你的想法是讚賞:)
`return N <=> self if other.kind_of? N` – Nakilon 2010-12-09 08:47:08
Yuck。 *如果*你絕對*必須*猴子補丁,你應該*至少*確保不違反方法的公共契約。 – 2010-12-09 09:37:51