Тип ограничения реализованы в виде следующих типов:Почему компилятор scala не выводит тип параметра доказательства?
abstract class <:<[-From, +To] extends Function1[From, To]
object <:< {
implicit def conforms[A] = new (A <:< A) { def apply(x: A) = x }
}
мы используем доказательства в нашем коде, как это:
def firstLast[A, C](it: C)(implicit ev: C <:< Iterable[A]) =
(it.head, it.last)
когда я очистить apply
метод компилятор говорит, что it
не содержит head
и last
, в то время как неявное разрешение типа уже было успешным. Это означает, что C является подтипом Iterable [A]. Но компилятор не может этого сделать. Это только то, что вывод типа Scala недостаточно мощный?
Какой код создает ошибку, которую вы описываете? Сначала краснеть, похоже, работает по назначению. –
'<: <' является оператором по умолчанию, доступным в Scala, почему вы собираетесь настраивать btw> – flavian
Не говорите мне, что вы говорите об ошибках, данных некоторыми IDE, такими как eclipse или intellij, а не самим компилятором Scala? –