本を読む

読書やコンピュータなどに関するメモ

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。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/966-ce9a833d

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad