頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


ブロック構文で勘違いしてたこと

Objective-Cのブロック構文を理解していなかったというお話だよ。

実のところブロック構文って積極的には使ってこなかったんだけど、もしかして便利なんじゃない?って感じで恐る恐る試しているところなんだ。
そしたら案の定(?)躓いたよ。

シンプルにして書くと次のような流れでやっていたんだ。
{
    int i = 10;
        
    int (^Plus)(int) = ^(int j) {
        return i+j;
    };
        
    NSLog(@"%d",Plus(5));//15
}
↑まずは意図通りに動いてくれるコード。
もともとあるiって変数の値に引数で渡した値を足して、それを返してもらうってブロック構文。
iの値は変えないから__blockとかは不要。
ここまではいいんだよ。

それじゃあってことでやってみたのが次のコード。最後の2行を追加しただけ。
{
     int i = 10;
        
    int (^Plus)(int) = ^(int j) {
        return i+j;
    };
        
    NSLog(@"%d",Plus(5));//15
        
    i = 20;
    NSLog(@"%d",Plus(5));//15
}
最初はこれは20+5で25が返ってくると思っていたんだけど、返ってくる値は15。
ここで変数iの値を変えてブロック構文を呼び出しても無駄なんだな。

なるほど、なるほど。ブロック構文ってスコープ外の値でも読んでくれる関数、みたいに理解していたんだけど、こういうものなんだね。

<< 文字入力確定を取り消すショートカット   TopPage  キャンペーン中!ソフトバンクでiTunesカード買ってきた >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/747-6bf26aa9




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad