Scala'da Programlama ile okuyorum. Şöyle ki:Scala: == Varsayılan eşittir?
Hep sınıftan
Any
devralınanequals
yöntemi, geçersiz kılarak yeni türleri için==
davranışını yeniden tanımlamak edebilirsiniz. Java'da olduğu gibi geçersiz kılınmadıkça geçerli olan, devralınanequals
nesnel kimliktir. Yaniequals
(ve==
ile) varsayılan olarakeq
ile aynıdır, ancak tanımladığınız sınıflardaequals
yöntemini geçersiz kılarak davranışını değiştirebilirsiniz.Any
sınıfında son bir yöntem olarak tanımlandığı için,==
'u doğrudan geçersiz kılmak mümkün değildir. Yani Scala==
davranır, olduğu gibi sınıftaAny
aşağıdaki şekilde tanımlandı ise:final def == (that: Any): Boolean = if (null eq this) (null eq that) else (this equals that)
Ama bu nasıl bir şey görünüyor scala 2.9.1 içinde görüyorum şeyle jibing değildir:
==
-
I (, derleyici şikayet olmadan gerekmez
equals
varsayılan olarak görünmüyor.
override
) doğrudan
==
geçersiz kılabilir
Yani böyle ya bana öyle geliyor: Yanlış yapıyorum
% scala Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29). Type in expressions to have them evaluated. Type :help for more information. scala> Rational(1) == Rational(1) res0: Boolean = false scala> Rational(1) equals Rational(1) res1: Boolean = true
- verir ya da ben eski bir sürümünü yetersiz okuyorum kitap ve şeyler değişti.
Neler oluyor?
gibi bir şey olarak Java (ve Scala kitaplığında) ile tutarlı davranışı, sen yeniden yazmak gerekiyordu eşittir almak için. JVM topraklarına döndüğümde bu beni ısırdı. Er ya da geç öğreneceğim. Zaten bir 'eşleştir' bırakabilirim ve sadece 'eşittir' anonim bir işlev atayabilir miyim? def eşittir geçersiz: Any => Boolean = {case r: Rational/* ... * /} 'oldukça çalışmıyor ... – rampion
@rampion - Hayır, tip imzasını tam olarak eşleştirmelisiniz. 'eşittir: Herhangi bir => Boole ', bir işlevi döndürdüğü anlamına gelir (yani' Function1 [Any, Boolean] 'sınıfının bir örneği). Bu kavramsal olarak bir anlamda eşdeğer olsa da, aynı yöntem değildir, bu yüzden işe yaramaz. –