next up previous contents
Next: 9. オブジェクト指向文法の概要 Up: 8. 変数/関数のライフタイムとスコープ Previous: 8.4 ブロックスコープルール

8.5 無スコープブロック式の注意点

Cmm では、同一名の変数を次々と定義しても、変数の多重定義エラーにはなり ません。

ブロック式の場合、ブロック内で定義された変数エリアは、ブロック を抜けるときに開放されます。

例えば、以下のwhile式では、各ループごとに、ブロック内変数 a が定義され、ブロック式の最後で開放されます。


while (1) {

var a ;
a = "Hello World" ;
}

ところが、無スコープブロック式の場合は、このブロックスコープルー ルが摘要されません。以下のプログラムでは、各ループごとに、ブロッ ク内変数 a が定義されますが、開放されません。そのため、次々と 新たに変数エリアを取り、最後にはエリアがなくなります。


while (1) {{

var a ;
a = "Hello World" ;
}}

そのため、無スコープブロック式を、ループ内で利用する場合は細心 の注意が必要です。

また、下記のように関数やメソッド定義の最外部のブロック式として、無スコープ ブロック式を利用することはできません。


func aFunc (x) {{

x ;
}}

next up previous contents
Next: 9. オブジェクト指向文法の概要 Up: 8. 変数/関数のライフタイムとスコープ Previous: 8.4 ブロックスコープルール
Tetsuo Ono
1998-11-05