11
Scala中有些东西似乎是不透明的,以我如以下时to
不是Int
成员函数:如何检查隐/富含转换,并用REPL实施特质
1.to(4)
我可以检查哪些行为在没有咨询语言参考的情况下引起了这种(隐式转换或特征或其他)?那也是在REPL?
如果REPL不能帮忙,有没有一些友好的选择?
Scala中有些东西似乎是不透明的,以我如以下时to
不是Int
成员函数:如何检查隐/富含转换,并用REPL实施特质
1.to(4)
我可以检查哪些行为在没有咨询语言参考的情况下引起了这种(隐式转换或特征或其他)?那也是在REPL?
如果REPL不能帮忙,有没有一些友好的选择?
使用Scala 2.9:
~/code/scala scala -Xprint:typer -e "1 to 4"
[[syntax trees at end of typer]]// Scala source: scalacmd4469348504265784881.scala
package <empty> {
final object Main extends java.lang.Object with ScalaObject {
def this(): object Main = {
Main.super.this();
()
};
def main(argv: Array[String]): Unit = {
val args: Array[String] = argv;
{
final class $anon extends scala.AnyRef {
def this(): anonymous class $anon = {
$anon.super.this();
()
};
scala.this.Predef.intWrapper(1).to(4)
};
{
new $anon();
()
}
}
}
}
}
使用Scala 2.10或2.11:
scala> import reflect.runtime.universe
import reflect.runtime.universe
scala> val tree = universe.reify(1 to 4).tree
tree: reflect.runtime.universe.Tree = Predef.intWrapper(1).to(4)
scala> universe.showRaw(tree)
res0: String = Apply(Select(Apply(Select(Ident(scala.Predef), newTermName("intWrapper")), List(Literal(Constant(1)))), newTermName("to")), List(Literal(Constant(4))))
scala> universe.show(tree)
res1: String = Predef.intWrapper(1).to(4)
也'见:implicits -v'上REPL。 – 2012-04-04 01:42:30