আমি পাইথন পটভূমি থেকে এসেছি, যেখানে আমার কোডের যে কোনও সময়ে আমি যুক্ত করতে পারি
import pdb; pdb.set_trace()
এবং রানটাইমের সময় আমি সেই জায়গায় একটি ইন্টারেক্টিভ ইন্টারপ্রেটারে ফেলে দেব। স্কালার জন্য কি সমতুল্য, নাকি রানটাইম এ এটি সম্ভব নয়?
আমি পাইথন পটভূমি থেকে এসেছি, যেখানে আমার কোডের যে কোনও সময়ে আমি যুক্ত করতে পারি
import pdb; pdb.set_trace()
এবং রানটাইমের সময় আমি সেই জায়গায় একটি ইন্টারেক্টিভ ইন্টারপ্রেটারে ফেলে দেব। স্কালার জন্য কি সমতুল্য, নাকি রানটাইম এ এটি সম্ভব নয়?
উত্তর:
হ্যাঁ, আপনি স্কেলা ২.৮ এ পারেন। মনে রাখবেন, এটি কাজ করার জন্য আপনাকে আপনার ক্লাসপথে স্কেলা-কম্পাইলারজার অন্তর্ভুক্ত করতে হবে। আপনি যদি আপনার স্কালার প্রোগ্রামটির সাথে অনুরোধ করেন তবে 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 আসে, ডান দিকের মানটি একটি ভালকে আবদ্ধ হবে যার নাম আপনি বামে সরবরাহ করেছেন। উদাহরণস্বরূপ, আমি যদি এই লাইনটি এভাবে পরিবর্তন করি:
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
।
এছাড়াও আপনি নিঃশর্তভাবে আবাহন করার মাধ্যমে REPL মধ্যে ড্রপ হতে পারে break
, যা একটি পায় List
এর DebugParam
একটি vararg পরিবর্তে। এখানে একটি সম্পূর্ণ উদাহরণ, কোড এবং সম্পাদন:
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>
scala.tools.nsc.MissingRequirementError: object scala not found.
স্কেলা ২.৮ এ একটি ত্রুটি হতে পারে । আপনার স্পষ্টভাবে হোস্ট প্রক্রিয়াটির ক্লাসপাথটি স্ক্যালাকের সেটিংসে প্রেরণ করতে হবে, break
এবং এবং এটি breakIf
করবেন না। এখানে break
এটির একটি প্যাচযুক্ত সংস্করণ রয়েছে : gist.github.com/290632
java -classpath ...
। আমার ধারণা আপনি যদি এর scala -classpath
পরিবর্তে ব্যবহার করেন তবে এটি ঠিকঠাক হবে।
java -classpath
হোস্ট প্রক্রিয়াটির সামগ্রীগুলি স্ক্যালাকের জন্য সেটিংসে দেয় না: old.nabble.com/…
ড্যানিয়েলের উত্তরে যুক্ত করতে স্কেলা ২.৯ অনুসারে, পদ্ধতি break
এবং breakIf
পদ্ধতিগুলি এতে অন্তর্ভুক্ত রয়েছে scala.tools.nsc.interpreter.ILoop
। এছাড়াও, DebugParam
এখন হয় NamedParam
।
ইন্টেলিজ আইডিএ:
Evaluate Expression
( Alt+ + F8, মেনুতে: চালান -> মূল্যায়ন এক্সপ্রেশন) অবাধ Scala কোড চালানোর জন্য উইন্ডো।গ্রহন:
Scala 2.10 পর্যন্ত উভয় break
এবং breakIf
থেকে সরিয়ে দেওয়া হয়েছে ILoop
।
দোভাষীর ভাঙতে আপনাকে ILoop
সরাসরি কাজ করতে হবে ।
প্রথমে scala compiler
পাঠাগার যুক্ত করুন। ইকলিপস স্কেলার জন্য, প্রকল্প => 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()
অ্যাকলিপস স্কালায় দোভাষীটি Console
ভিউ থেকে ব্যবহার করা যেতে পারে :