無名関数(ラムダ、Lambda、Closure、クロージャ)
Python
py
lambda a, b : 式
改行するときどうするんだろう?
Swift
swift
{ (a: Int, b: Int) -> Int in
return a + b
}
名前つきの引数にはならない
- 省略について
- 入れる先の型が決まっていれば、戻り値/引数は省略で きる
- 結果が1行なら
return
も省略可 - というのは、クロージャを関数の引数で渡す場合に使われる
- 引数で渡したあと、別の場所で使うようなケース(非同期で呼びたいケースなど)は
@escaping
をつける
引数のない場合
swift
let x: Int = {
return 3 * 5
}
引数のある場合
swift
let x: (Int, Int) -> Int = {
return $0 * $1
}
swift
let x: (Int, Int) -> Int = { $0 * $1 }
- トレイリングクロージャ:
- 関数の最後の引数がクロージャの場合は、クロージャを
()
の外に書くことができる。 - そのとき、引数名は省略することができる
- 関数の最後の引数がクロージャの場合は、クロージャを
こう書くのと
swift
Button(action: {
..
}, label: {
...
})
こう書くので同じ
swift
Button(action: {
..
}) {
...
}
マルチトレイリングクロージャといって、こうも書ける。
swift
Button() {
..
} label: {
...
}
TypeScript
ts
(a: number, b: number): number => {
return a + b;
}
式が1個なら、{}
も return
も省略可
ts
(a: number, b: number): number => a + b
PowerShell
powershell
{ ... }.Invoke()
ちょっと違うものかも「スクリプトブロック」と呼ばれてる。
以下の違いはなんだろうか。.
と &
はスコープの違いだとか。bash と同じ感じか
powershell
$f = { ... }
$f.Invoke()
. $f
& $f