ライブラリがどのように機能するかを理解しようとすると、暗黙的な変換が混乱を招きます。たとえば、「val foo: Foo = 1」のような式を見ると、何が 1 を Foo に変換するのでしょうか?
式の評価中に実行中のコード パスを出力するように scala ライブラリ (または REPL) に指示することは可能ですか?
ライブラリがどのように機能するかを理解しようとすると、暗黙的な変換が混乱を招きます。たとえば、「val foo: Foo = 1」のような式を見ると、何が 1 を Foo に変換するのでしょうか?
式の評価中に実行中のコード パスを出力するように scala ライブラリ (または REPL) に指示することは可能ですか?
コンパイラ コマンド ラインに「-Xprint:typer」(Swing GUI ブラウザの場合は「-Ybrowse:typer」) を追加すると、変換が明示的に適用されたコードを表示できます。
変換を出力する代わりに、暗示が突然出てくるわけではないことを認識しなければなりません。何らかの方法でそれらをスコープに入れる必要があります。代替手段は次のとおりです。
import
ステートメント。がオブジェクトであるimport x.y._
場合に注意してください。これは、暗黙的をスコープに持ち込む唯一の方法です。y
デフォルトでは、オブジェクトscala.Predef
はすべてスコープにインポートされることに注意してください。これは、Scala のデフォルトの暗黙的オブジェクトがスコープに入る方法です。
scalac -print
適用された場合、暗黙的な型変換後にコードを出力します。
class A{
val x : String = "hi" drop 1
}
結果は次のようになります。
package <empty> {
class A extends java.lang.Object with ScalaObject {
@remote def $tag(): Int = scala.ScalaObject$class.$tag(A.this);
private[this] val x: java.lang.String = _;
<stable> <accessor> def x(): java.lang.String = A.this.x;
def this(): A = {
A.super.this();
A.this.x = scala.this.Predef.forceRandomAccessCharSeq(
scala.this.Predef.stringWrapper("hi").drop(1));
()
}
}
}