0

AS3で文字列キーを使用して辞書を定義するにはどうすればよいですか?と読み取り操作を行う方法は?例えば:

var Dic:Dictionary = new Dictionary();
Dic["Exhausted"] = "He who talks more is sooner exhausted, please keep smiling :)";
String str = str.substring(8,str.length-1); // == str = "Exhausted";
trace('Dic[' + str + '] = ' + Dic[str]);

出力はDic[Exhausted]= undefined ??? !!

なぜ?

4

1 に答える 1

0

この行に構文エラーがあると思います。

String str = str.substring(8,str.length-1);

これを使用する場合:

var d:Dictionary = new Dictionary();
d["Exhausted"] = "He who talks more is sooner exhausted, please keep smiling :)";

trace(d["Exhausted"]);

あなたはそれがすべて大丈夫であることがわかります。

問題var str:String = str.substring(8,str.length-1);は、「str」という名前の文字列を定義することですが、strで呼び出されvar str:Stringたメソッドの結果である値を割り当て、substring()substringを呼び出したときにstrがまだ存在していません。これが理にかなっているかどうかわからない:strに部分文字列を適用した結果としてstrを定義します。

actionscriptコンパイラはbtwに文句を言うべきでした:

strではなく属性Stringの後に定義キーワード(関数など)が必要です。

ただの大げさな推測ですが、コード内のどこかでstrが定義されていて、strを使用する前にstrを使用してstrを再度更新するだけでしょうか。その場合、strを再定義するのではなく、単に新しい値を割り当てる必要があります。例えば

//somewhere else
var str:String = "12345678Exhausted";
//further down
var Dic:Dictionary = new Dictionary();
Dic["Exhausted"] = "He who talks more is sooner exhausted, please keep smiling :)";
str = str.substring(8,str.length); // == str = "Exhausted";
trace('Dic[' + str + '] = ' + Dic[str]);

また、別の構文エラーは、次の定義方法ですstr:(java / c ++ / var str:Stringetc。style)ではなく(as2 / as3構文)である必要がありますString str

于 2013-02-10T02:17:41.560 に答える