爲什麼下面的代碼工作?斯卡拉奇怪的地圖功能行爲
scala> List(1,2,3) map "somestring"
res0: List[Char] = List(o, m, e)
它在2.9和2.10都有效。 展望類型確定:
[master●●] % scala -Xprint:typer -e 'List(1,2,3) map "somestring"' ~/home/folone/backend
[[syntax trees at end of typer]] // scalacmd2632231162205778968.scala
package <empty> {
object Main extends scala.AnyRef {
def <init>(): Main.type = {
Main.super.<init>();
()
};
def main(argv: Array[String]): Unit = {
val args: Array[String] = argv;
{
final class $anon extends scala.AnyRef {
def <init>(): anonymous class $anon = {
$anon.super.<init>();
()
};
immutable.this.List.apply[Int](1, 2, 3).map[Char, List[Char]](scala.this.Predef.wrapString("somestring"))(immutable.this.List.canBuildFrom[Char])
};
{
new $anon();
()
}
}
}
}
}
看起來它被轉換爲WrappedString
,其中有一個適用的方法。這解釋了它是如何工作的,但沒有解釋WrappedString
如何被接受到A => B
類型的參數中(如在scaladoc中指定的那樣)。有人能解釋一下,請問這是怎麼發生的?
好,我知道了。謝謝。 – folone 2013-03-15 13:30:15