[SCALA] 임의의 스칼라 코드의 위치 동안 통역에 드롭
SCALA임의의 스칼라 코드의 위치 동안 통역에 드롭
내가 파이썬 배경에서 온 내 코드에서 어떤 시점에서 내가 추가 할 수있는
import pdb; pdb.set_trace()
런타임에 나는 그 자리에서 대화 형 인터프리터으로 삭제됩니다. 스칼라에 대한 동등한 있는가, 또는이 런타임에 불가능하다?
해결법
-
==============================
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.9로, 다니엘의 대답에 추가하려면, 휴식 및 breakIf 방법은 scala.tools.nsc.interpreter.ILoop에 포함되어 있습니다. 또한, DebugParam 지금 NamedParam입니다.
스칼라 2.9로, 다니엘의 대답에 추가하려면, 휴식 및 breakIf 방법은 scala.tools.nsc.interpreter.ILoop에 포함되어 있습니다. 또한, DebugParam 지금 NamedParam입니다.
-
==============================
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()
이클립스 스칼라에서 인터프리터는 콘솔보기에서 사용할 수 있습니다 :
from https://stackoverflow.com/questions/2160355/drop-into-interpreter-during-arbitrary-scala-code-location by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 상관, AnyVal는, AnyRef는, 객체와 자바 코드에서 사용될 경우 그들이 어떻게지도 할 사이의 관계는 무엇인가? (0) | 2019.11.03 |
---|---|
[SCALA] 자기 형 주석이 자기의 차이? (0) | 2019.11.02 |
[SCALA] 게으른 발은 무엇입니까? (0) | 2019.11.02 |
[SCALA] 스파크 DataFrame에서 중첩 열 삭제 (0) | 2019.11.02 |
[SCALA] 어떻게 형태 보증 된 열거 유형을 모델링하기 위해? (0) | 2019.11.02 |