2

scala のインタープリターから IMain メソッドを使用して、文字列に変換された関数を実行しようとしています。ただし、ユーザーが作成したクラスをインタープリターにインポートできません。

たとえば、scala データベースからクラスを簡単にインポートできます。

val m = new IMain()
m.interpret("import scala.math.sin")
m.interpret("sin(10)")

そして、このインポートは、インタープリターが実行されている限り残ります。ただし、作成したクラスとオブジェクト (またはプライベート ライブラリ) をインポートする方法を見つけることができませんでした。

m.interpret("import sounder.Sounder.play"
m.interpret("play(t=>50*sin(2*Pi*t*400),0,10")

(再生は、コンピューターのサウンドカードからサウンドを再生する方法です)

インタープリター内のすべてのメソッドを使用してみましたが、どれも機能していないようです。私が思いついた唯一の解決策は、クラスファイルを with ; の単一行に変換することです。各行を分離し、それを解釈して実行しますが、それでもコンパイルを妨げる問題があります。

インタープリターへの入力を許可するメソッドはありますか、代わりに、scala インタープリターによって文字列を処理できるようにする別のプロセスがあります。

Windows 7 コンピューターで Scala 2.9.2 を実行しています。

4

1 に答える 1

0

次のことを試しましたか。

val m = new IMain() {
   override protected def parentClassLoader = sounder.Sounder.getClassLoader
}

Scala 2.10 では、次のことができます。

val s = new tools.nsc.Settings()
s.embeddedDefaults[sounder.Sounder]
val m = new IMain(s)

経由でプログラムを起動すると、問題が発生する場合がありますsbt run。マニュアルには、 に追加する必要があることが記載されていfork in run := trueますbuild.sbtが、それはカスタム ライブラリには役に立ちません。

于 2013-01-19T13:47:41.370 に答える