トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     evalで参照すると「undefined」になってしまいます
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
alinco
Åê¹ÆNo.35354
投稿日時: 2007-10-2 13:16
新米
居住地:
投稿: 7
使用環境:
Win2000SP4, Flash8 Pro(ActionScript2.0)
evalで参照すると「undefined」になってしまいます
「7036.カスタムクラスから別の場所・・・」からの派生質問です。

前回教えていただき、こちらのコード
class DataFile{
  static var lv_data:LoadVars = new LoadVars();
  
  function loadDataFile(){
    lv_data.onLoad = function(success:Boolean):Void {
    if (success) {
      trace("Complete!");
    };
    lv_data.load("FruitData.txt");
  }
}

で読み込んだ、FruitData.txtファイルの中身
fruitApple_name=姫りんご&fruitApple_num=3&fruitOrange_name=みかん&fruitBanana_num=5

ですが、
trace(lv_data.fruitApple_name);

と、直接参照した場合はちゃんと「姫りんご」と表示されるのですが
var str:String;
var myKeyword:String = "Apple";
str = "lv_data.fruit" + myKeyword + "_name";

と、動的に指定すると
trace(this[str]);
trace(eval(str));

のどちらを使っても「undefined」となってしまいます。

trace(str);とすると、ちゃんと「lv_data.fruitApple_name」と接続できていますし、
traceしているタイミングも、直接参照の時と同じです。

どこが悪いのか、もう自分では分かりません。。。

もぅASは諦めたい気持ちでいっぱいですが、最後にこれだけ、、
どなたか間違っている部分をご指摘いただけませんでしょうか。
よろしくお願いいたします。
野中文雄
Åê¹ÆNo.35356
投稿日時: 2007-10-2 13:57
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: evalで参照すると「undefined」になってしまいます
閉じ括弧}が、ひとつ抜けていませんか?
引用:
alincoさんは書きました:
前回教えていただき、こちらのコード
class DataFile {
	static var lv_data:LoadVars = new LoadVars();

	function loadDataFile() {
		lv_data.onLoad = function(success:Boolean):Void  {
			if (success) {
				trace("Complete!");
			}
		};
		lv_data.load("FruitData.txt");
	}
}

私の環境(Flash 8/Mac OS X)でも、クラス内のeval()関数が整合性のある値を返しません。LoadVarsインスタンスは、文字列で指定しなければいけないのでしょうか?
var str:String;
var myKeyword:String = "Apple";
// str = "lv_data.fruit" + myKeyword + "_name";
str = "fruit" + myKeyword + "_name";
trace(lv_data[str]);


----------------
 

alinco
Åê¹ÆNo.35359
投稿日時: 2007-10-2 15:29
新米
居住地:
投稿: 7
使用環境:
Win2000SP4, Flash8 Pro(ActionScript2.0)
Re: evalで参照すると「undefined」になってしまいます
引用:
閉じ括弧}が、ひとつ抜けていませんか?

コピペするときに失敗してしまったようです、申し訳ありません;

引用:
私の環境(Flash 8/Mac OS X)でも、クラス内のeval()関数が整合性のある値を返しません。

ということは、私のScriptが稚拙である以前に、
LoadVarsで読み込んだ場合は、動的な参照自体がASでは不可能ということでしょうか。。?
Tonpoo (gaienboy改め)
Åê¹ÆNo.35363
投稿日時: 2007-10-2 15:52
職人
居住地: 東京・神宮前
投稿: 717
使用環境:
Windows 7 Professional,
Flash CS5 Pro,
Flash Player 10,1,102,64
Re: evalで参照すると「undefined」になってしまいます
こんにちは、gaienboyです。
引用:
alincoさんは書きました:
ということは、私のScriptが稚拙である以前に、
LoadVarsで読み込んだ場合は、動的な参照自体がASでは不可能ということでしょうか。。?


一つ前の野中先生のレスをよくご覧下さい。動的な参照自体はできていますよ↓

var str:String;
var myKeyword:String = "Apple";
// str = "lv_data.fruit" + myKeyword + "_name";
str = "fruit" + myKeyword + "_name";
trace(lv_data[str]);



----------------
Tonpoo (a.k.a. gaienboy)
Tonpoo.com / TONPOOBLOG / twitter@tonpootwit

alinco
Åê¹ÆNo.35365
投稿日時: 2007-10-2 17:02
新米
居住地:
投稿: 7
使用環境:
Win2000SP4, Flash8 Pro(ActionScript2.0)
Re: evalで参照すると「undefined」になってしまいます
あぁぁ・・ すみません;

str = "lv_data.fruit" + myKeyword + "_name";
trace(lv_data[str]);

としてしまっていました、無事に読み込むことができました。
本当にどうもありがとうございます!!

でも、なぜ
str = "lv_data.fruit" + myKeyword + "_name";
trace(this[str]);

はダメで、
str = "fruit" + myKeyword + "_name";
trace(lv_data[str]);

だと良いのでしょうか。。。

ASは謎がいっぱいです 。頑張って勉強します。
どうもありがとうございました!
野中文雄
Åê¹ÆNo.35366
投稿日時: 2007-10-2 17:16
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: evalで参照すると「undefined」になってしまいます
まず、配列アクセス演算子の使い方について、「ドット演算子と配列アクセス演算子」をお読みください。
引用:
alincoさんは書きました:
でも、なぜ
str = "lv_data.fruit" + myKeyword + "_name";
trace(this[str]);

はダメで、

つぎに、以下のステートメントで値が取得できない理由は、thisがインスタンスを参照するからです。lv_dataは静的(static)プロパティですので、インスタンスを参照しません。
str = "fruit" + myKeyword + "_name";
trace(this["lv_data"][str]);

しかも、今回の例ではDataFileインスタンスとLoadVarsインスタンスが絡みますので、処理結果の理解はより難解になります。

参考:「インスタンスのプロパティでないのに宣言を求められる


----------------
 

野中文雄
Åê¹ÆNo.35367
投稿日時: 2007-10-2 17:32
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: evalで参照すると「undefined」になってしまいます
「整合性のある値を返」さないというのは、つぎのようなサンプルを私の環境で試した結果にもとづきます。
// ActionScript 2.0クラス定義ファイル: evalTest.as
class evalTest {
	var obj:Object;
	function evalTest() {
		obj = new Object();
		obj.test = "text";
		var _str:String = "obj.test";
		var prop_str:String = "test";
		trace(_str === "obj.test");  // 出力: true
		trace(eval(_str));  // 出力: undefined
		trace(eval("obj.test"));  // 出力: text
		trace(obj[prop_str]);  // 出力: text
	}
}

// fla(swf)ファイル
// フレームアクション
new evalTest();

引用:
野中文雄は書きました:
私の環境(Flash 8/Mac OS X)でも、クラス内のeval()関数が整合性のある値を返しません。


----------------
 

ひろゆき
Åê¹ÆNo.35388
投稿日時: 2007-10-2 23:11
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: evalで参照すると「undefined」になってしまいます
引用:
alincoさんは書きました:
ASは謎がいっぱいです 。頑張って勉強します。

LoadVarsオブジェクトを使った外部テキストファイルの読込み
LoadVars.loadで読み込む

どうも直接関係なさそうだということで、読み飛ばしたりされていませんか?


----------------
質問する際は、回答者に具体的な情報を与えてください。

alinco
Åê¹ÆNo.35410
投稿日時: 2007-10-3 11:39
新米
居住地:
投稿: 7
使用環境:
Win2000SP4, Flash8 Pro(ActionScript2.0)
Re: evalで参照すると「undefined」になってしまいます
野中さん、ひろゆきさん、アドバイスどうもありがとうございます。
教えていただいたページの内容をなんとか理解しようと、うろうろしていたところです。。

引用:
lv_dataは静的(static)プロパティですので、インスタンスを参照しません。

というのは、多分理解できた予定ですが、

引用:
今回の例ではDataFileインスタンスとLoadVarsインスタンスが
や、

引用:
「整合性のある値を返」さないというのは、・・・

はさっぱりです。。

現在の私の理解度は「LoadVarsは魔法の呪文?」程度ですので、
「オブジェクト」とか「インスタンス」とか「static」の性質についての部分から、
もうちょっと理解し直します

どうもありがとうございましたm(_)m””
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops