3 回答
TA貢獻1853條經驗 獲得超18個贊
case class Foo[A](a:A) { // 'A' can be substituted with any type
// getStringLength can only be used if this is a Foo[String]
def getStringLength(implicit evidence: A =:= String) = a.length}evidenceAStringAStringAStringa.length
scala> Foo("blah").getStringLength
res6: Int = 4FooString:
scala> Foo(123).getStringLength<console>:9: error: could not find implicit value for parameter evidence: =:=[Int,String]
getStringLengthAFoogetStringLengthFoo[String]
<:<<%<
A =:= B意思是A一定就是B A <:< B表示A必須是B的子類型(類似于 簡約
類型約束 <:)A <%< B意思是A必須是 可見
作為B,可能通過隱式轉換(類似于簡單類型約束)。 <%)
增編
List.sumIntsListList[Int]ListsumIntsList[Int]
TA貢獻2021條經驗 獲得超8個贊
def getStringLength(implicit evidence: A =:= String)
A =:= String=:=[A, String]=:=
val a: Tuple2[Int, String] = (1, "one")
val a: Int Tuple2 String = (1, "one")
.()
TA貢獻1804條經驗 獲得超2個贊
class Pair[T](val first: T, val second: T)
smaller
def smaller = if (first < second) first else second
T
class Pair[T <: Ordered[T]](val first: T, val second: T)
Tsmaller
def smaller(implicit ev: T <:< Ordered[T]) = if (first < second) first else second
Pair[File], 只要你不打電話 smaller
OptionorNullOption[Int]orNullOption[String]Option[Int]orNullSome(42).orNull
error: Cannot prove that Null <:< Int
添加回答
舉報
