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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     onLoad = functionでの戻り値の取得
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
nacbox
Åê¹ÆNo.45190
投稿日時: 2010-6-14 16:27
新米
居住地: 東京
投稿: 25
使用環境:
Win7 / Flash CS4 PRO
onLoad = functionでの戻り値の取得
コーダーズルームではなくて、初心者部屋レベルの質問かもしれませんが、よろしくお願いします。

AS2.0です。
外部xmlを読み込み、読み込んだ値を使用したいと考えています。


var newsXml:XML = new XML();
System.useCodepage=true;
newsXml.ignoreWhite = true;
newsXml.onLoad = function(success:Boolean) {
	if (success) {
		ここで処理(A)
	} else {
		trace("XMLのロードに失敗しました。");
	}
};
newsXml.load("news.xml");

上記のコードで、「ここで処理(A)」と書いてある箇所で、XMLの中身を取り出してローカル変数に渡すわけですが、ここは関数内なので、関数の外でその値を使用できない気がします。

通常の関数ですと、

b = hoge();
function hoge() {
	var a = 1;
	return a;
}

とすれば、ローカル変数のaが戻り値となり、bに渡されるのは分かります。

しかし、
newsXml.onLoad = hoge();
の場合は、関数内のローカル変数をどうやって取り出せば(あるいは、戻り値をどうやって受け取れば)いいのでしょうか。

ローカル変数とグローバル変数の関係はいつも頭が混乱しがちで、苦労しています。
どなたか、よろしくお願いいたします。
奥村 典史
Åê¹ÆNo.45191
投稿日時: 2010-6-14 17:23
常連
居住地: 大阪府(以前:東京都府中市 / 土日は大抵京都)
投稿: 69
使用環境:
FlashCS5.5,
WinXP,Win7(64bit),

単体テスト用に
FlexSDK3.4,
As3Unit

エディター
FlashBuilder5

スクリプト
ActionScript3.0
Re: onLoad = functionでの戻り値の取得
newsXml.onLoad = hoge();
ではなく
newsXml.onLoad = hoge;

ですよね?たぶん。

さて、質問の内容に関してですが
私ならクロージャを使います。

■予備知識
「関数を変数に入れる」ってことが出来ます


c = hoge;

b = c();

function hoge() {
	var a = 1;
	return a;
}



こんな感じです。

さて、newsXml.onLoadなのですが
このnewsXml.onLoadは先の例の"c"と同じものと考えてください。

このonLoadは
どこか私たちの知らないところで呼ばれています。
戻り値を取り出すのは不可能です。


■クロージャーを使ったやり方
変数newsにXMLを読んだものを入れてみます。
(ここで処理(A)の戻り値がXMLを読んだものとしてます)



var news;
var newsXml:XML = new XML();
System.useCodepage=true;
newsXml.ignoreWhite = true;
newsXml.onLoad = function(success:Boolean) {
	if (success) {
		news = ここで処理(A)
	} else {
		trace("XMLのロードに失敗しました。");
	}
};
newsXml.load("news.xml");


どうでしょうか?
やってみてください。

気をつけなければならないのはnewsXml.onLoadが
呼ばれてからじゃないとnewsはnilのままであるということです。
nacbox
Åê¹ÆNo.45192
投稿日時: 2010-6-14 19:13
新米
居住地: 東京
投稿: 25
使用環境:
Win7 / Flash CS4 PRO
Re: onLoad = functionでの戻り値の取得
「クロージャ」という用語が、ググってみたりしてもなかなか解説が難しくてピンとこないところもあるんですが、
今回の件について理解できたことは、

・onLoad = hoge; では戻り値は取得できない
・関数内の値は、ローカル変数ではなく、関数外で宣言した変数を書き変えて使う

ってことですね。

なんだか、
・関数内のローカル変数を何とか関数外に取り出せないか
・戻り値を取得する方法で何とかできないか
というところに頭が凝り固まっていて、単純にグローバル変数を活用するという脳みそが出てきませんでした。
お恥ずかしい。

うまくいきました。
ありがとうございました。
奥村 典史
Åê¹ÆNo.45193
投稿日時: 2010-6-14 19:58
常連
居住地: 大阪府(以前:東京都府中市 / 土日は大抵京都)
投稿: 69
使用環境:
FlashCS5.5,
WinXP,Win7(64bit),

単体テスト用に
FlexSDK3.4,
As3Unit

エディター
FlashBuilder5

スクリプト
ActionScript3.0
Re: onLoad = functionでの戻り値の取得
たしかにクロージャの解説は難しいことがいっぱい書いてあってよーわからんですね(汗

しばらくはグローバル変数と考えてても問題ないと思います。

そのうち使うこともでてくると思います。

クロージャは使ってみると「え?これ・・・クロージャって言うんだ・・」って感じなので・・・
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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