Bu neden derlenmiyor?
verilen hata SomeElement üzerinde tanımlı yöntem eval
tip kısıtlamaları tatmin etmiyor neden anlayamıyorum class SomeElement needs to be abstract, since method eval in trait Element of type [T <: Typed]=> scala.util.Try[T] is not defined
Neden scalac bir yöntemin gerekli tip imzasına uymadığına inanmıyor?
olduğunu.
Anladığım kadarıyla Try
Try
numaralı alt öğeleri içeren Typed
alt sınıflarını döndürmelidir. Tür parametresinde eşdeğerdir. SomeElement
'da eval
'un uygulanması, NumberLike
ve NumberLike
alt sınıflarını Typed
döndürür. Peki yanlış giden neydi?
import scala.util.Try
trait Element {
def eval[T <: Typed]: Try[T]
}
trait Typed
case class NumberLike(n: Long) extends Typed
case class SomeElement(n: Long) extends Element {
def eval = Try {
NumberLike(n)
}
}
object app extends Application {
println (SomeElement(5).eval)
}
ya SomeElement
yılında eval açık tip parametre eklemek çalışıyorum yardımcı değildir:
case class SomeElement(n: Long) extends Element {
def eval[NumberLike] = Try {
NumberLike(n)
}
}
yukarıda SomeElement ait Definition değiştirme verir:
found : <empty>.NumberLike
required: NumberLike(in method eval)
NumberLike(n)
EDIT'u neden nu derlemediğini bilmek isterim. Sorun için geçici çözümler yardımcı olabilir, ancak gerçekten burada neler olduğunu bilmek istiyorum.
Yapamam tercih Şimdi tam bir cevap yazın, ancak kesinlikle, işlevsiz işlevle poli işlevini geçersiz kılmaya/uygulayamazsınız; bu yüzden “def eval [T: NumberLike] =…” gibi bir yazı yazmak zorundasınız. ” – DaunnC
Neden“ soyut özellik ”? – cchantep
@DaunnC düzenleme – Squidly