[#47605] Rubyでも「private」イコール「非公開」? — Makoto Kuwata <kwa@...>
桑田といいます。
12 messages
2010/11/04
[#47606] Re: Rubyでも「private」イコール「非公開」?
— Yusuke ENDOH <mame@...>
2010/11/04
private constant 提案者の遠藤です。
[#47629] [ANN]第3回ぐんまRubyの勉強会(guRuby)のご案内 — Yuichi NANSAI <nansai@...>
南齋と申します。
2 messages
2010/11/14
[#47633] Mac OS X Snow Leopardのirbで日本語が入力できない — Tomohiko Hayashi <hayashi-t@...>
みなさま
7 messages
2010/11/17
[ruby-list:47605] Rubyでも「private」イコール「非公開」?
From:
Makoto Kuwata <kwa@...>
Date:
2010-11-04 03:37:23 UTC
List:
ruby-list #47605
桑田といいます。 [ruby-dev:39685] で、定数に public/private を指定できるようにすると いう話題があります。 > 今の Ruby には、クラスが公開 API かどうかを伝える手段がドキュメント > しかありません。そのため、ERB::Compiler など、ライブラリの中の公開 > でない (と思われる) inner class を外から自由に参照できてしまいます。 > > これを防ぐためには、匿名クラスを用いて定義すれば大分隠蔽できますが、 > 記述が相当煩雑になってしまいます。また、そのようにしてしまうと、 > 「非公開というのは承知の上で敢えて使いたい」という要求に答えにくく > なります。 > > そこで、定数に public/private の属性を指定できるようにするのはどう > でしょうか。 (詳細はこちらをご覧ください。 Feature #2366: private constant http://redmine.ruby-lang.org/issues/show/2366 ) ここで質問なのですが、Rubyでも「privateなもの=非公開」という 認識なのでしょうか。C++/Javaならこれが成り立つのはわかるのですが、 Rubyにおける private method は、「レシーバを指定した呼び出しが できないメソッド」のことであり、公開・非公開とは違う話だと 思ってました。 実際、ヘルパーメソッドなどはprivateだけど絶賛公開していることも ありますし、逆に公開したくないんだけどレシーバつけて呼び出すから privateはつけられないようなメソッドもあります。 上述のチケット (#2366) ではこの機能が導入されることが決定している ようですが、その場合、 ・定数 (クラス) に private をつけると、それは「非公開」を意味する ・メソッドに private をつけると、それは「レシーバが指定できない」を意味する というようになり、privateが複数の意味を持つことになって混乱しそうな 気がしました (ちょうどC言語での "static" のように)。 僕の場合だと、 ・レシーバなしで使う(関数のように使う)メソッドはprivateをつける ・非公開にするものは :nodoc: をつける (privateの有無は問わない) と使い分けていました。これは、Rubyではprivateであることと非公開で あることは違うという認識だったからです。 もしRubyでも「private=非公開」というのが一般的な認識であるなら、 自分のやり方を変えたほうがいい (たとえば private はやめて protected にするとか) と思い、質問してみました。 -- makoto kuwata