私はHaxe、Lime、OpenFlでコーディングしています。クラスインスタンスによって参照されるマップにデータを格納するようにクラスを設定しようとしています。クラスタイプは、推論を介してコンストラクターに渡されます。しかし、私はこれらすべてにまったく慣れておらず、構文を完全に理解することはできません。これは私がこれまでに得たものです。
class DynamicStore<A>
{
private var hashA:Map<Class<A>,String>;
public function new<A>(paramA:Class<A>) {
hashA = new Map();
}
}
しかし、これは私に次のエラーを与えます:
抽象マップには、IMap <Class <DynamicStore.A>、String>を受け入れる@:to関数がありません。
これを行う方法はありますか?
最初の質問:
本当にクラスをキーとして使用しますか?またはオブジェクト?
クラスで鍵となる必要があります
「mypackage.blob.MyClass」のように、クラスのフルネームをキーとして使用する方がはるかに簡単です。より安全で、取り扱いとデバッグが簡単です。
Map<String, String>
その場合は十分でしょう。
オブジェクトがキーである必要がある場合
その場合、コードは次のようになります。
import haxe.ds.ObjectMap;
class Test<A>
{
static function main() {}
private var hashA :ObjectMap<A,String>;
public function new(paramA:A) {
hashA = new ObjectMap<A,String>();
}
}
この場合、「マップ」を直接使用できない理由は、「マップ」がシンタックスシュガーであり、キータイプに応じてStringMap、IntMapなどに解決されるためです。使用するマップの種類がわからない場合は続行できません(これは主にクロスコンパイルの問題が原因です)。
リマーク
最後に、あなたの構造は私には少し風変わりで奇妙に思えます。あなたが何を達成しようとしているのか、そしてなぜあなたがそれをあなたのやり方で構築しているのかを知ることは興味深いでしょう。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加