flash on 2012-2-12
/**
* Copyright 12346 ( http://wonderfl.net/user/12346 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/kNtG
*/
package{import flash.display.Sprite;
public class stackOpe extends Sprite{
//wonderflだとリリースビルドできない・・・?
//FlashDevelopでリリースビルドすると実行できたんだけどなー
//バーチャルマシンのスタックにごみを残す方法とスタックからほじくる方法がわかったので覚え書き。
//リリースビルドではtrace()が削除されることを利用して、
//f(x,y,z)のように表記されてるからシンタックスエラーは出ないけど
//f(,,)でコンパイルされるようようなコードを書く
//
//基本操作
// スタックに積む : あらかじめ実行したい関数funcとその引数arg1...argN-1までをスタックに積んでおく
// func[this,arg1,arg2,arg3, … ,argN-1,X,"Y"];//X["Y"]がエラーにならないように。
//
// スタックから出す : 実行したくなったらargNを確定させて呼び出し argNはダミーでも良い
// argN(trace(),trace(), … ,trace());//積んであるfuncの引数として取り出す。traceの数はN+1
//
// 受け取る関数func : argNの指定方法によっては最後の引数が変化するのでとりあえずなんでも受け取れるように
// func(arg1,arg2, … ,argN,something){}
// func(arg1,arg2, … ,argN,...a){}
//個人メモ
//<call arg_count=N>:stack( …, function, receiver, arg1, arg2, ..., argN )=>( …, value )
public function stackOpe(){
addChild(T);T.width=T.height=465;
print("2変数の場合");
func[this,0,this,"dummy"];//stack(f this 1)
1(trace(),trace(),trace());//stack(f this 1 0 this _ _ _)
print("スタックに積んだ順に新しいほうから実行");
func[this,1,2,3,this,"dummy"];
func[this,4,5,6,this,"dummy"];
func[this,7,8,9,this,"dummy"];
0(trace(),trace(),trace(),trace(),trace());
0(trace(),trace(),trace(),trace(),trace());
0(trace(),trace(),trace(),trace(),trace());
}
public var dummy:int=0;
}}
import flash.text.TextField;
var T:TextField=new TextField;
function print(...a):void{T.appendText(a+"\n");}
function func(...a):void{print(a)}