복붙노트

[SCALA] 임의의 스칼라 코드의 위치 동안 통역에 드롭

SCALA

임의의 스칼라 코드의 위치 동안 통역에 드롭

내가 파이썬 배경에서 온 내 코드에서 어떤 시점에서 내가 추가 할 수있는

import pdb; pdb.set_trace()

런타임에 나는 그 자리에서 대화 형 인터프리터으로 삭제됩니다. 스칼라에 대한 동등한 있는가, 또는이 런타임에 불가능하다?

해결법

  1. ==============================

    1.예, 스칼라 2.8에 있습니다. 이 작업을 위해, 당신은 당신의 클래스 경로에 스칼라 - compiler.jar을 포함해야 것을 유의하십시오. 당신이 스칼라와 스칼라 프로그램을 호출하는 경우, 자동으로 수행 (또는 그래서 내가 만든 테스트에서 같다)됩니다.

    예, 스칼라 2.8에 있습니다. 이 작업을 위해, 당신은 당신의 클래스 경로에 스칼라 - compiler.jar을 포함해야 것을 유의하십시오. 당신이 스칼라와 스칼라 프로그램을 호출하는 경우, 자동으로 수행 (또는 그래서 내가 만든 테스트에서 같다)됩니다.

    당신은 다음과 같이 사용할 수 있습니다 :

    import scala.tools.nsc.Interpreter._
    
    object TestDebugger {
      def main(args: Array[String]) {
        0 to 10 foreach { i =>
          breakIf(i == 5, DebugParam("i", i))
          println(i)
        }
      }
    }
    

    여러 DebugParam 인수를 전달할 수 있습니다. REPL가 올 때, 오른쪽의 값은 이름이 왼쪽에 제공된 발에 바인딩됩니다. 예를 들어, 나는 다음과 같이 해당 행을 변경하는 경우 :

          breakIf(i == 5, DebugParam("j", i))
    

    그런 다음 실행은 다음과 같이 발생합니다 :

    C:\Users\Daniel\Documents\Scala\Programas>scala TestDebugger
    0
    1
    2
    3
    4
    j: Int
    
    scala> j
    res0: Int = 5
    

    당신은 입력하여 실행을 계속 : 종료합니다.

    또한 무조건 가변 인자 대신 DebugParam의 목록을 수신 휴식을 호출하여 REPL로 떨어질 수 있습니다. 다음은 전체 예제 코드 및 실행의 :

    import scala.tools.nsc.Interpreter._
    
    object TestDebugger {
      def main(args: Array[String]) {
        0 to 10 foreach { i =>
          breakIf(i == 5, DebugParam("j", i))
          println(i)
          if (i == 7) break(Nil)
        }
      }
    }
    

    그리고:

    C:\Users\Daniel\Documents\Scala\Programas>scalac TestDebugger.scala
    
    C:\Users\Daniel\Documents\Scala\Programas>scala TestDebugger
    0
    1
    2
    3
    4
    j: Int
    
    scala> j
    res0: Int = 5
    
    scala> :quit
    5
    6
    7
    
    scala> j
    <console>:5: error: not found: value j
           j
           ^
    
    scala> :quit
    8
    9
    10
    
    C:\Users\Daniel\Documents\Scala\Programas>
    
  2. ==============================

    2.스칼라 2.9로, 다니엘의 대답에 추가하려면, 휴식 및 breakIf 방법은 scala.tools.nsc.interpreter.ILoop에 포함되어 있습니다. 또한, DebugParam 지금 NamedParam입니다.

    스칼라 2.9로, 다니엘의 대답에 추가하려면, 휴식 및 breakIf 방법은 scala.tools.nsc.interpreter.ILoop에 포함되어 있습니다. 또한, DebugParam 지금 NamedParam입니다.

  3. ==============================

    3.하게 IntelliJ IDEA :

    하게 IntelliJ IDEA :

    식:

    스칼라 2.10 모두 휴식과 breakIf 현재 ILoop에서 제거되었습니다.

    통역에 침입하기 위해 직접 ILoop와 함께 작동하도록해야합니다.

    먼저 스칼라 컴파일러 라이브러리를 추가합니다. 이클립스 스칼라를 들어 오른쪽 => 경로 =>는 도서관 ... => 스칼라 컴파일러를 추가 구축 프로젝트를 클릭합니다.

    당신이 통역을 시작할 위치 그리고 당신은 다음을 사용할 수 있습니다 :

    import scala.tools.nsc.interpreter.ILoop
    import scala.tools.nsc.interpreter.SimpleReader
    import scala.tools.nsc.Settings
    
    val repl = new ILoop
    repl.settings = new Settings
    repl.settings.Yreplsync.value = true
    repl.in = SimpleReader()
    repl.createInterpreter()
    
    // bind any local variables that you want to have access to
    repl.intp.bind("row", "Int", row)
    repl.intp.bind("col", "Int", col)
    
    // start the interpreter and then close it after you :quit
    repl.loop()
    repl.closeInterpreter()
    

    이클립스 스칼라에서 인터프리터는 콘솔보기에서 사용할 수 있습니다 :

  4. from https://stackoverflow.com/questions/2160355/drop-into-interpreter-during-arbitrary-scala-code-location by cc-by-sa and MIT license