So-net無料ブログ作成

関数のマーシャリング [JavaScript]

「分散関数呼び出し」 [1] という記事を読んで、JavaScript でも特に環境までマーシャリングされるということは無いのではないかと思った。

js>  f = function (x) { return function (y) { return x + y } }
function (x) {
    return (function (y) {return x + y;});
}
js> g = f(3)
function (y) {
    return x + y;
}
js> eval('h=' + g.toSource())
function (y) {
    return x + y;
}
js> g(2)
5
js> h(2)
typein:3: ReferenceError: x is not defined

単に関数定義(含仮引数)の(環境はともかく)文字列表現を得ることができて、eval が存在すればよいという条件だと JavaScript が特に珍しいということはなくて Tcl でもできる(info args コマンドと info body コマンド)し、たしか Lisp でも同様のことはできた気がします。動的言語なら特に出来ておかしいということはなさそう。どう書く?org のリフレクション系お題にできるかな?

[1] http://d.hatena.ne.jp/Gemma/20070818


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。