0

Groovy を使用して、BASIC スクリプトを処理する DSL を構築しています。

次のような行があります。

100 INPUT V

これは、実行中のスクリプトにコードを挿入する正規表現によって取得されます。

    def retString = "scan = new Scanner(System.in);"
    retString += "${matcher[0][1]} ="
    retString += "scan.nextLine()\n"
    return retString

このコードは適切に実行されますが、返されることはありません (つまり、スキャナは nextLine() から返されることはないため、V/matcher[0][1] の値は返されません。代わりに、コードは何回キーボード入力を待ってもスタックします)。エンターキーを押しました。)

ここで何を間違って投票しましたか? 入力は、入力されているときに TextArea にエコーされます (つまり、これがその時点でのフォーカスです)。それに関連していますか?

4

2 に答える 2

1

これが質問のタイプミスなのか実際のエラーなのかはわかりませんが、次のようになります。

retString + "${matcher[0][1]} ="

これでいいのではないですか?

retString += "${matcher[0][1]} ="

しかし、それはおそらくあなたの見返りの欠如に影響を与えていません. 問題は、テキスト領域の入力ストリームが System.in ではないことだと推測しています。どのストリームが使用されているかを確認し、System.in の代わりにそのストリームに新しいスキャナーを作成する必要があります。

于 2012-06-19T19:19:04.130 に答える
0

最終的に、これは、BASIC が Java や Groovy よりも表現力の高い (まれな) 領域の 1 つであるように思われます。ラッチ。特に難しいことはありませんが、BASIC の 1 に比べて約 25 行のコードです。

于 2012-06-20T17:41:32.640 に答える