Próbowałem nauczyć się Scala przez twitter Scala school. Ale obecnie utknąłem w jednym z ich type bound examples.Uzyskiwanie błędu związanego z typem Scala: nie znaleziono: typ <% <
W szczególności jest to ten, w którym typ może być widoczny jako określony typ, przy użyciu operatora relacji typu: <%<
.
Kiedy wykonać następujący kod w moim konsoli Scala:
scala> class Container[A](value: A) { def addIt(implicit evidence: A <%< Int) = 123 + value }
... otrzymuję następujące błędy:
<console>:7: error: not found: type <%<
class Container[A](value: A) { def addIt(implicit evidence: A <%< Int) = 123 + value }
^
<console>:7: error: overloaded method value + with alternatives:
(x: Double)Double <and>
(x: Float)Float <and>
(x: Long)Long <and>
(x: Int)Int <and>
(x: Char)Int <and>
(x: Short)Int <and>
(x: Byte)Int <and>
(x: String)String
cannot be applied to (A)
class Container[A](value: A) { def addIt(implicit evidence: A <%< Int) = 123 + value }
Moje pytanie brzmi, dlaczego jest interpreter Scala skarżą?
Próbowałem przejrzeć dokumentację Scala, ale nie udało mi się znaleźć informacji o tym użytkowniku w dowolnym miejscu. Widzę, że szkoła Scala została stworzona na podstawie Scala 2.8.0, a ja używam Scala 2.10.0 - więc może to zostało usunięte? Jeśli tak, to dlaczego wydaje się, że jest to użyteczny operator?
Wygląda na to, że tego nie ma w Scali 2.10, choć nie jestem do końca pewien dlaczego - https://github.com/scala/scala/blob/v2.10.0/src/library/scala/Predef.scala # L1 – Impredicative
Został wycofany w https://github.com/scala/scala/commit/e1780e9686914d835b295e125511368eeb1d0733#L0L350 – Debilski
Dobrze! Wygląda dokładnie na przyczynę, o której myślałem poniżej. – Impredicative