関数内関数ってもしかしてふつう使わない?

特殊な書き方なのかな?

関数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を使っているのかもしれない。