回答編集履歴
2
誤字を修正しました。
answer
CHANGED
@@ -37,7 +37,7 @@
|
|
37
37
|
}
|
38
38
|
|
39
39
|
// たとえば、定義したクロージャーを戻り値として外側に返すと、
|
40
|
-
// 通常であれば破棄されるはずの `number` も抱えたまま
|
40
|
+
// 通常であれば破棄されるはずの `number` も抱えたまま返す。
|
41
41
|
return closure
|
42
42
|
}
|
43
43
|
```
|
1
コードを実際に動かして遊ぶ例を追記しました。
answer
CHANGED
@@ -52,4 +52,16 @@
|
|
52
52
|
|
53
53
|
これによって、キャプチャーした変数や定数の扱われ方が変わってきて、元の変数や定数に影響を与えるかどうかも変わってきます。大きいような小さいような、ともあれさりげなく挙動が変わってくるので、このあたりの変化をはっきり意識するか考慮せず広く考えるかでも「キャプチャーとは何か」の捉え方が変わってきそうな気がします。
|
54
54
|
|
55
|
-
なんにしても、先ほど挙げたコードの例と、挙げた2つの言葉「クロージングオーバー」と「キャプチャーリスト」について調べてみると、クロージャーに対する視野がまた広がってくるかもしれないです。
|
55
|
+
なんにしても、先ほど挙げたコードの例と、挙げた2つの言葉「クロージングオーバー」と「キャプチャーリスト」について調べてみると、クロージャーに対する視野がまた広がってくるかもしれないです。
|
56
|
+
|
57
|
+
###### 先ほどのコード例の遊び方
|
58
|
+
|
59
|
+
先ほどのコードを記載した後、次のようなコードを書くと、実際に動かしてキャプチャーの挙動を試すことができます。戻り値で受け取ったクロージャーがキャプチャーしているはずの `number` の値の変化に注目してみてください。
|
60
|
+
|
61
|
+
```swift
|
62
|
+
let serialNumberGenerator = makeSerialNumberGenerator()
|
63
|
+
|
64
|
+
serialNumberGenerator() // => 1
|
65
|
+
serialNumberGenerator() // => 2
|
66
|
+
serialNumberGenerator() // => 3
|
67
|
+
```
|