6

私は別の質問の例に従おうとしていましたが、説明できないものに出くわしました:

scala> import scala.reflect.runtime.{currentMirror => m}
import scala.reflect.runtime.{currentMirror=>m}

scala> m.mkToolBox()
<console>:12: error: value mkToolBox is not a member of reflect.runtime.universe.Mirror
              m.mkToolBox()
                ^

scala> import scala.tools.reflect.ToolBox
import scala.tools.reflect.ToolBox

scala> m.mkToolBox()
res3: scala.tools.reflect.ToolBox[reflect.runtime.universe.type] = scala.tools.reflect.ToolBoxFactory$ToolBoxImpl@225765b0

インポート前mkToolBoxのメンバーではなく、インポート後のメンバーである理由は何ですか?mToolBox

4

2 に答える 2

3

ToolBoxmkToolBoxにポン引きする暗黙のクラスですMirror。と同じ話Evalですeval

于 2012-07-01T22:01:10.563 に答える
2

で調べるとreify、次のようになります。

scala> reify{ m.mkToolBox() }.tree
res4: reflect.runtime.universe.Tree = 
{
  val qual$1 = scala.tools.reflect.`package`.ToolBox(scala.reflect.runtime.`package`.m);
  val x$1 = qual$1.mkToolBox$default$1;
  val x$2 = qual$1.mkToolBox$default$2;
  qual$1.mkToolBox(x$1, x$2)
}

ToolBoxこれは、 package object 内で名前が付けられた関数へのメソッド呼び出しがあることを意味しますscala.tools.reflectreifyメソッドを公開するため、オブジェクトではありませんapply

そのため、コンパイラの API ドキュメントには左側のトレイト以外は何も表示されていませんが、パッケージを見ると、暗黙的なメソッド定義が表示されます。

PS: はい、これは本当の質問でした。ツリーを取得するために物を具体化することを考えるまで、特性と同じ名前の大文字で始まるメソッドの考えは思いつきませんでした。

于 2012-07-01T15:20:26.910 に答える