1

http://tutor.rascal-mpl.org/Rascal/Libraries/analysis/m3/Core/modifiers/modifiers.html#/Rascal/Libraries/lang/にあるように、Type を \int() に初期化しようとするときjava/m3/AST/Declaration/Declaration.htmlで、rascal が「Expected Type, but got TypeSymbol」というエラーをスローします。

これは私が使用したコードです:

Type inttype = \int();

Type 変数を \int() に初期化する適切な方法は何ですか?

4

2 に答える 2

2

問題を解決するには、次のように記述できます。

Type myIntType = Type::\int();

さらに説明が続きます。コンストラクターは、\int()異なる場所で少なくとも 2 回定義されています。

  • で使用される Java 型の抽象構文ツリー定義Declarationsintこれは、ソース コードでの単語の表現です。
  • TypeSymboljava::lang::m3::Coreの定義。\int()シンボリック型を表します 。

同じ概念を指しているが、表現が異なるため、同じ名前が付けられています。1 つ目はソース コードの直接的な表現に使用され、2 つ目は抽象的な記号解釈に使用されます。

2 つの表現を区別するには、AST ノードを定義するモジュールをインポートするか、TypeSymbol を定義するモジュールをインポートする必要があります。両方をインポートした場合は、表現を明示的に選択する必要があります。

Type myIntType = Type::\int(); TypeSymbol mySymbol = TypeSymbol::\int();

エラー メッセージを最後に説明すると、システムは TypeSymbol で 2 番目の種類の \int()` を選択して値を作成し、それを最初の種類の変数に割り当てようとしました。

于 2014-02-28T11:57:01.797 に答える