문제

도서관의 작동 방식을 알아 내려고 할 때 암시 적 전환이 혼란 스럽습니다. 예를 들어, 'val foo : foo = 1'과 같은 표현을 살펴보면 1은 1로 변환합니까?

표현식을 평가하는 동안 실행중인 코드 경로를 인쇄하도록 Scala Library (또는 REPL)에 지시 할 수 있습니까?

도움이 되었습니까?

해결책

컴파일러 명령 줄 (또는 스윙 GUI 브라우저의 경우 -ybrowse : typer)에 "-xprint : typer"를 추가하여 명시 적으로 적용된 코드를 볼 수 있습니다.

다른 팁

변환을 인쇄하는 대안으로, 의미가 파란색에서 나올 수는 없다는 것을 인식해야합니다. 당신은 어떤 식 으로든 범위로 가져와야합니다. 대안은 다음과 같습니다.

  1. 명백한 import 성명. 조심하십시오 import x.y._ 언제 y 이것은 객체입니다. 이것이 범위로 암시 적으로 가져 오는 유일한 방법이기 때문입니다.
  2. 클래스의 객체 동반자는 다른 것으로 변환됩니다.
  3. 대상 클래스의 객체 동반자, 그 대상이 어떻게 든 명시 적으로 (예 : 예 : 예 : 예 : 예 : 예 :).

객체에 유의하십시오 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));
      ()
    }
  }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top