next up previous contents
Next: 7.7 可変引数 Up: 7. 関数 Previous: 7.5 引数の渡し方

7.6 変数の解決

Cmm のスコープルールは、実行時スコープです。そのため、関数実行時にシン ボルの定義が解決できていれば、再帰呼びだしなどで起こる前方参照の未定義 エラーは起こりません。


func b (n) {

if (n < 0)
return ;
a (n-1); // bの定義時点では、aは未定義。コンパイラ言語ならここでエラー
}

b(5) // この呼びだしは、この時点 a が定義されていないのでエラー

func a (n) {
println (n) ;
b(n) ;
}

a (10); // この時点で a, b どちらも定義済みなのでエラーは発生しない

また、下記の例のように、関数中に定義されたローカル変数で、変数が解決さ れても問題ありません。


func FuncA () {

// FuncA定義場所より前に、変数aVariableは定義されていない。
if (is_integer(aVariable)) {
println ("This is Integer") ;
} else {
println ("This is NOT Integer") ;
}
}

func VariableProvider () {
var aVariable ; // ここで aVariable が定義された
aVariable = 10 ;
// このFuncA()呼びだしでは、この関数で定義したaVariableが参照される
FuncA() ;
}

VariableProvider() ;
// ここでは、変数aVariableが定義されていないのでエラーとなる
FuncA ()


next up previous contents
Next: 7.7 可変引数 Up: 7. 関数 Previous: 7.5 引数の渡し方
Tetsuo Ono
1998-11-05