Почему вызов fn (Iterator («foo») компилируется, но вызов fn (fooIterator) завершается с ошибкой «тип несоответствия: найдено: Iterator [java.lang.String] требуется: scala.Iterator [ com.banshee.Qx.HasLength] "В чем разница между этими двумя вызовами функции, использующей набор структурных типов?
object Qx {
type HasLength = {def length: Int}
def fn(xs: Iterator[HasLength]) = 3
var tn = fn(Iterator("foo"))
var fooIterator = Iterator("foo")
var tnFails = fn(fooIterator) //doesn't compile
}
Разве они не то же самое
Можете ли вы опубликовать тип сингларов итераторов? Могут ли быть аннотации или импликации различий? – Dario
Это всего лишь стандартный материал библиотеки, дополнительный код не требуется. Скала> Итератор («Foo») res0: Итератор [java.lang.String] = непустой итератор –