3 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊
Any*
class StringOrInt[T]object StringOrInt { implicit object IntWitness extends StringOrInt[Int] implicit object StringWitness extends StringOrInt[String]}
foo
object Bar { def foo[T: StringOrInt](x: T) = x match { case _: String => println("str") case _: Int => println("int") }}
foo(5)
foo("abc")
foo(true)
StringOrInt[Boolean]
StringOrInt
a sealed
T: StringOrInt
StringOrInt[T]

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊
scala> def f[A](a: A)(implicit ev: (Int with String) <:< A) = a match { | case i: Int => i + 1 | case s: String => s.length | }f: [A](a: A)(implicit ev: <:<[Int with String,A])Intscala> f(3)res0: Int = 4scala> f("hello")res1: Int = 5scala> f(9.2)<console>:9: error: Cannot prove that Int with String <:< Double. f(9.2) ^
資料來(lái)源:
添加回答
舉報(bào)