Rubyのバージョン 2.6.5
目次
- 関数の中に関数を定義する方法
- 関数の上書き
- まとめ
- 今回の気づき
関数の中に関数を定義する方法
以下のようにして関数の中に関数を定義します。
ruby
def a
def b
puts "b"
end
end
ここで、関数bをよびだすと以下のようなエラーが起こります。
def a
def b
puts "b"
end
end
b #関数を呼び出す
↓↓↓↓↓ターミナル
Traceback (most recent call last):
test.rb:7:in `<main>': undefined local variable or method `b' for main:Object (NameError)
bという関数が定義されていないようです。
b関数を定義するには、最初にa関数を呼び出しておく必要があります。
def a
def b
puts "b"
end
end
a #初めにa関数を呼び出しておく→ここでb関数が定義される
b #関数を呼び出す
↓↓↓↓↓ターミナル
b
関数の上書き
クラスに定義されているインスタンスメソッドの上書きはオーバーライドというらしい。
以下のようにして上書きすることができる。
ruby
def a
puts "abc"
end
a #a関数を呼び出す
def a
puts "123"
end
a #a関数を呼び出す
↓↓↓↓↓ターミナル
abc
123
a関数やc関数を呼び出すたびにb関数を上書きしてみる。
ruby
def a
def b
puts "abc"
end
end
def c
def b
puts "123"
end
end
a #a関数を呼び出す→b関数が定義される
b #b関数を呼び出す
c #c関数を呼び出す→b関数が上書きされる
b #b関数を呼び出す
a #a関数を呼び出す→b関数が上書きされる
b #b関数を呼び出す
↓↓↓↓↓ターミナル
abc
123
abc
Rubyはオブジェクト指向のプログラミング言語です。なので、オーバーライド以外に使い道がないような気もしますが、オーバーライドはとても重要な要素なので覚えていて損はないと思います。
まとめ
関数の中に関数を定義することができます。使い道はよくわかりません。ので、できることだけ頭に入れておけばいいと思います。やり方はその都度調べればいいと思います。
今回の気づき
関数の中に関数を定義するという、使うタイミングがわからないものを紹介したこともあり、深い話ができなかった。実装に悩んで、調べて解決したものを載せる方がいいかもしれない。