2012-05-22 16 views
5

Bir ruby ​​sınıfı için == uygulamak istiyorum. BenRuby'de "==" uygulaması yapılmalı mıdır?

def ==(o) 
    o.respond_to?(:id) && self.id == o.id 
end 

veya this makaleye göre

def ==(o) 
    o.is_a?(Foo) && self.id == o.id 
end 

, eski daha mantıklı olur gibi görünüyor yapabilirsiniz. Eğer eql?'u uyguluyorsam, ikincisini yapardım. Bu doğru mu?

+0

'==', * eql? 'Daha özel bir gereksinime sahip olsa bile türleri aşması gerektiği anlamına gelmez *. Ancak, gösterildiği gibi, daha yapısal temelli olması yararlı olabilir. –

+0

@pst 'response_to?' Ile sorun mu var? –

+0

Bu senaryoda 'id 'nedir? Object # object_id ile aynı mı yoksa bir aktif kayıt kimliği mi yoksa bir instance değişkenine bir erişim mi? –

cevap

1

Bu, rastgele bir nesneyi veya belirli bir türle karşılaştırdığınızdan kaynaklanır. İkinci form spesifik, ilk jenerik. Sizin durumunuzda, muhtemelen belirli bir formla sorun yok demektir. Genel karşılaştırmalar yalnızca, karşılaştırdığınız nesne, eşleştirilebilecek bir şey olarak dönüştürülebilir veya yorumlanabilir olduğunda geçerlidir. id kullanarak çok açık uçlu görünüyor. Bu, Foo 10 ve Bar 10'un tamamen farklı kaynaklardan alınabilecekleri zaman denk olduğunu ima eder.

+1

Sağ. Sanırım .id kötü bir örnekti. Benim dersim aslında .job_id' için kontrol ediyor –

İlgili konular