クロージャ
closure: 関数閉包
エンクロージャによって、関数の定義と、その関数のために確保された変数空間を用意できる
変数空間の値を更新できる
状態を保持できる
変数空間の値を引数に渡さずに参照できる
むやみなグローバル変数を必要としない
特定の周波数をもつオシレータを作れるあんも.icon state: オシレータの状態
クロージャの返り値にもなっていて、自身で更新できる
sleeptime: 作ったオシレータの性質
クロージャの返り値になっていないが、参照させることができる
code:jl
function create_oscillator(hz=50) # エンクロージャ
# クロージャのみが利用できる変数
state = false
sleeptime = 1 / hz
return function(clock::Bool) # クロージャ
if clock
state = !state
end
sleep(sleeptime)
return state
end
end
onehz_oscillator = create_oscillator(1)
for i in 1:10
println(onehz_oscillator(true))
end