Belirli bir tür için varsayılan değeri sağlayan bir Default
tip yazım oluşturmaya çalışıyorum. Ben bugüne kadar ile geldi budur: beklendiği gibi yerine null
verir neredeKapalı parametre çözünürlüğü - önceliği ayarlama
trait Default[A] {
def value: A
}
object Default {
def withValue[A](a: A) = new Default[A] {
def value = a
}
def default[A : Default]: A = implicitly[Default[A]].value
implicit val forBoolean = withValue(false)
implicit def forNumeric[A : Numeric] =
withValue(implicitly[Numeric[A]].zero)
implicit val forChar = withValue(' ')
implicit val forString = withValue("")
implicit def forOption[A] = withValue(None : Option[A])
implicit def forAnyRef[A >: Null] = withValue(null : A)
}
case class Person(name: String, age: Int)
case class Point(x: Double, y: Double)
object Point {
implicit val pointDefault = Default withValue Point(0.0, 0.0)
}
object Main {
def main(args: Array[String]): Unit = {
import Default.default
println(default[Int])
println(default[BigDecimal])
println(default[Option[String]])
println(default[String])
println(default[Person])
println(default[Point])
}
}
Yukarıdaki uygulama BigInt
ve BigDecimal
(ve Numeric
örnekleri olan diğer kullanıcı tanımlı tipler) halleri hariç, davranır sıfır. forNumeric
'un forAnyRef
üzerinden öncelik kazanması için ne yapmalıyım ve beklediğim davranışı alıyorum?
Teşekkür: Burada – missingfaktor