ボクココ

個人開発に関するテックブログ

Ruby 動的ディスパッチ

今日は基礎に戻ってRubyの学習。動的ディスパッチに関してメモ。

動的ディスパッチ

実行時に呼ぶメソッドを柔軟に変えたいときとかに send() を使う。
これが中々面白いのでいろいろ実験してた。
Test:Unitとか基本的にはメソッド名の先頭にtest_ をつけているが、その理由もわかった。 例をみるとわかりやすい。

1 class Hoge
2 def hoge1
3 p "aiueo"
4 end
5
6 def hoge2
7 p "kakikukeko"
8 end
9
10 def hoge3
11 p "sasisuseso"
12 end
13 end
14
15 hoge = Hoge.new
16
17 hoge.public_methods.delete_if{|method_name| method_name !~ /hoge/}.each do |method|
18 hoge.send(method)
19 end
こんな感じでpublic_methodsを呼び出すとスーパークラスとかにあるメソッドも全部とってきちゃうから限定してあげるために先頭にtestとかhoge とかつけてあげる模様。
すると

1 "aiueo"
2 "kakikukeko"
3 "sasisuseso"

という出力が得られる。
こういう時ってsendを使わないと確かに普通のメソッド呼び出しじゃ実現できないっすね!
このような手法をパターンディスパッチとも呼ぶらしい。
今日はこの本を読みながらやってる。難しいけど中級Rubyプログラマなら読む価値ありです。
[rakuten:neowing-r:10723263:detail]