Ruby でメソッド内にネストしてメソッドを定義することはできるが、名前空間にならないみたい。クラス内のクラスとはちがう(参照)。あんまり意味がないのかな。
def a def b puts "B" end puts "A" b end a b
の出力は
A B B
となる。内側のメソッドb
に、トップレベルからアクセスできてしまっている。
メソッド内メソッドに意味があるとすれば、メソッドを含むところのメソッドが呼び出されない限り、メソッド内メソッドが定義されないこと。例えば
def a def b puts "B" end end b
はエラーになり、
def a def b puts "B" end end a b #=>B
はエラーにならない。
参考:
Ruby のネストしたメソッドと、変数のスコープ | すぐに忘れる脳みそのためのメモ