Bu cevap hala fo, 2 yıl gecikti Diğerlerinin yararı Kabul edilen cevabın, AnyVal'den gereksiz yere uzandığını belirtmek isterim.
Sadece orijinal yanıtta düzeltilmesi gereken küçük bir hata var. def **
yönteminin yalnızca bir parametresine, yani temelin yapıcıda zaten geçirilmiş olduğu ve orijinal koddaki gibi değil, iki parametresi olması gerekir. O Tespit ve backticks Sonuçlar kaldırılırken: here görüldüğü gibi beklendiği gibi çalıştığını
import scala.math.pow
implicit class PowerInt(i: Int) {
def ** (b: Int): Int = pow(i, b).intValue
}
. Üzerinde denir yöntem tanımsız ise
Scala derleyici bir Int
sadecePowerInt
bir artığını edecektir. Bu yüzden AnyVal'den uzamanıza gerek yok.
Scala, sahnelerin arkasında, kurucu argümanı türü, atanan nesnenin türü ile aynı olan örtülü bir sınıf arar. Nesnenin yalnızca bir türü olabileceğinden, örtük sınıfların yapıcılarında birden fazla bağımsız değişkeni olamaz. Üstelik, aynı yapıcı türüne sahip iki örtük sınıf tanımlarsanız, işlevlerinin benzersiz imzalara sahip olduğundan emin olun, aksi takdirde Scala, hangi sınıfın belirleyici olacağını ve belirsizlik hakkında şikayette bulunacağını bilmez.
Not 'o **' ne '^' sağ öncelik (nedeni bu olmaz neden stdlib içermez). '4 * 5 ** 3'' (4 * 5) ** 3' değil '4 * (5 ** 3)' dır. – sschaef
Scala, ayrıştırma yöntemlerini LL olmayan (1) dilbilgisine değiştirebilir; örn .: C++ 'nun nasıl birden fazla'> ''