io language assignment code
今日は気分転換に io の話題でも
io-lang には3種類くらいの assignment statement(というか expressionかな)があるんだけど、
どれも使い方がよくわからん、と最初につまづくことかと思います。
代入式としては、以下の3つです
1 2 3 |
|
と、これらはそれぞれ、以下のように動作します
1 2 3 4 5 6 |
|
んで、::=
である、newSlot は setter を生成してくれるメソッドになります。
1 2 3 |
|
こんな感じ。
今回は、この ::=
の動作まわりではなく、:=
と =
についての話題です。
まずは、下記のコードをみてください
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
これの結果はどうなるでしょうか。
すべての x の出力は hoge メソッドで設定された 123 になるでしょうか。
それともスコープ上 一番上にある 10 のままになるでしょうか。
結果はこんな感じになります
1 2 3 4 |
|
なんと、hoge メソッドで上書きした(updateSlot)値は foo メソッドで上書きされていない(setSlot)のです
少し不思議な動きな感じもします。
ただ、これも javascript で考えると案外フツーなことだったりします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
このjsのコードもioの結果と同じになります。
なんとなく、ioでもレキシカルスコープみたいのがあるんだなーと思うと夢が広がりングですね。
ちなみに、この話題は最近投稿された↓のトピックから参照してます。
iolanguage : Message: Re: [Io] Assignment Operators
その内、どこかで block と interpolate などについても話題にしたいところ。