Previous << Control Flow
Next >> Type Safety
すべての関数およびブロック ({
...}
) は、宣言用の新しいスコープを導入します。各関数およびブロックは、そのスコープ内または外部のスコープ内の宣言を参照できます。
let x = 10
fun f(): Int {
let y = 10
return x + y
}
f()
/* is `20` */
/* Invalid: the identifier `y` is not in scope. */
y
fun doubleAndAddOne(_ n: Int): Int {
fun double(_ x: Int) {
return x * 2
}
return double(n) + 1
}
/* Invalid: the identifier `double` is not in scope. */
double(1)
各スコープは新しい宣言を導入することができ、すなわち、外側の宣言が覆い隠されます。
let x = 2
fun test(): Int {
let x = 3
return x
}
test()
/* is `3` */
スコープは字句的であり、動的ではありません。
let x = 10
fun f(): Int {
return x
}
fun g(): Int {
let x = 20
return f()
}
g()
/* is `10`, not `20` */
宣言は、囲む関数の上に影響(hoist)しません。
let x = 2
fun f(): Int {
if x == 0 {
let x = 3
return x
}
return x
}
f()
/* is `2` */
翻訳元