関数内関数ってもしかしてふつう使わない?
特殊な書き方なのかな?
関数f内でしか関数gを使わないとき、こう書いている。
def f def g #f内でしか使われない何かの処理 end #gを使った処理 end
でも、どこ書く?を見ても、関数の中で関数を宣言している人がいない。
なぜか、常に並列に関数を書いている。
何か並列でなければならない問題でもあるのかな?
思ったこと
- 関数fの中で関数gを書く
- 関数fの中でしか関数gが使われないことが分かる
- 関数fと関数gを並列に書く
- 関数fと関数gの立場が同じのような印象を受ける
例えばこんな感じ
こういうlocalっていう関数があったとして…
#local 5 #=> #>1 # >2 # >3 # >4 # >5 # >5 # >4 # >3 # >2 #>1
実装は、このように書いた方が見やすいと思う。
def local1 num def layout n (" "*(n-1)).concat ">#{n}" end 1.upto(num) {|i| puts(layout(i))} num.downto(1) {|i| puts(layout(i))} end
あー、でもlambdaなどを使った方が良いかもしれない。
def local2 num layout = lambda {|n| (" "*(n-1)).concat ">#{n}"} 1.upto(num) {|i| puts(layout.call(i))} num.downto(1) {|i| puts(layout.call(i))} end
ふつうの人はlambdaを使っているのかもしれない。