Rubyのprotectedの使いどころ
第15回yokohama.rbで、Rubyのprotectedの使いどころが話題にのぼってたそうですね。
基本は同意ですが、自分が遭遇した使いどころを1つ。現地でどんな話になってたかわからないので、既出ならすみません。
こんな1方向リスト構造と、その探索メソッドを作ってみます。
class HogeNode def initialize(nxt, val) @nxt = nxt @val = val end def [](val) _find(val) or 'not found' end def _find(val) if val == @val val elsif @nxt r = @nxt._find(val) r and @val + r end end end node1 = HogeNode.new(nil, 'c') node2 = HogeNode.new(node1, 'b') node3 = HogeNode.new(node2, 'a') p node3['c'] p node3['x']
このまま実行すると問題ありません。
$ ruby hoge.rb "abc" "not found"
が、この_findはメソッド形式で公開したくないなぁと思ったときに、_findをprivateにするとエラーになります。
hoge.rb:17:in `_find': private method `_find' called for #<HogeNode:0x89861e4> (NoMethodError) from hoge.rb:8:in `[]' from hoge.rb:27:in `<main>'
そして、protectedならOK。
コメント
コメントの投稿
トラックバック
https://emasaka.blog.fc2.com/tb.php/966-ce9a833d