first, here 3 snippets of code along output on scala 2.10.2
// 1. def one: seq[list[string]] = seq(list("x")) ++ list(list("x")) println(one) // => list(list(x), list(x))) // 2. def two: list[list[string]] = seq(list("x")) ++ list(list("x")) println(two) // => // error: type mismatch; // found : seq[list[string]] // required: list[list[string]] // seq(list("x")) ++ list(list("x")) // 1 error found // 3. println(seq(list("x")) ++ list(list("x"))) // => list(list(x), list(x)) the main code in 3 snippets same -- seq(list("x")) ++ list(list("x"))
the first , third snippet show (print) type list[list[string]], second snippet, specifies return type list[list[string]] fails compile. first one's return type seq[list[string]] it's printed list[list[string]].
what happening here?
the return type of second snippet list[list[string]], value has type seq[list[string]], exception occurs. list subclass of seq, it's more concrete type. println prints out values have, not types, if want see actual type of expression, print in scala repl:
scala> seq(list("x")) ++ list(list("x")) res5: seq[list[string]] = list(list(x), list(x)) see res5 type infered seq[list[string]], value list(list(x), list(x)). list case class automatically overriden tostring method, which, readability overriden compiler.
Comments
Post a Comment