私はPythonのバックグラウンドを持っており、コードの任意の時点で追加できます
import pdb; pdb.set_trace()
そして実行時に、私はその場所でインタラクティブなインタプリタにドロップされます。Scalaに相当するものはありますか、それとも実行時にこれは不可能ですか?
私はPythonのバックグラウンドを持っており、コードの任意の時点で追加できます
import pdb; pdb.set_trace()
そして実行時に、私はその場所でインタラクティブなインタプリタにドロップされます。Scalaに相当するものはありますか、それとも実行時にこれは不可能ですか?
回答:
はい、できます。Scala2.8で。これが機能するためには、クラスパスにscala-compiler.jarを含める必要があることに注意してください。を使用してscalaプログラムを呼び出すとscala
、自動的に実行されます(または、私が行ったテストではそう思われます)。
その後、次のように使用できます。
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が表示されると、右側の値は、左側で指定した名前のvalにバインドされます。たとえば、その行を次のように変更すると、次のようになります。
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
を入力して実行を続行します:quit
。
varargの代わりにのbreak
を受け取るを呼び出すことによって無条件にREPLにドロップすることもできます。完全な例、コード、および実行は次のとおりです。List
DebugParam
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>
java -classpath ...
。scala -classpath
代わりに使用すればうまくいくと思います。
java -classpath
、ホストプロセスの内容をscalacの設定に渡しません:old.nabble.com/…–
ダニエルの答えに追加するために、Scala 2.9以降、メソッドbreak
とbreakIf
メソッドはに含まれていscala.tools.nsc.interpreter.ILoop
ます。また、DebugParam
今NamedParam
です。
IntelliJ IDEA:
Evaluate Expression
(Alt+ F8、メニュー内:実行->式の評価)ウィンドウを開いて、任意のScalaコードを実行します。Eclipse:
Scalaの2.10のとおり両方break
とbreakIf
から削除されましたILoop
。
通訳に侵入するには、ILoop
直接作業する必要があります。
最初にscala compiler
ライブラリを追加します。Eclipse Scalaの場合、プロジェクトを右クリック=> Build Path
=> Add Libraries...
=> Scala Compiler
。
そして、インタプリタを開始する場所で次を使用できます。
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()
Eclipse Scalaでは、インタープリターは次のConsole
ビューから使用できます。