[#47605] Rubyでも「private」イコール「非公開」? — Makoto Kuwata <kwa@...>

桑田といいます。

12 messages 2010/11/04
[#47606] Re: Rubyでも「private」イコール「非公開」? — Yusuke ENDOH <mame@...> 2010/11/04

private constant 提案者の遠藤です。

[ruby-list:47615] Re: Rubyでも「private」イコール「非公開」?

From: Yukihiro Matsumoto <matz@...>
Date: 2010-11-06 17:32:20 UTC
List: ruby-list #47615
まつもと ゆきひろです

In message "Re: [ruby-list:47605] Rubyでも「private」イコール「非公開」?"
    on Thu, 4 Nov 2010 12:37:23 +0900, Makoto Kuwata <kwa@kuwata-lab.com> writes:

|ここで質問なのですが、Rubyでも「privateなもの=非公開」という
|認識なのでしょうか。C++/Javaならこれが成り立つのはわかるのですが、
|Rubyにおける private method は、「レシーバを指定した呼び出しが
|できないメソッド」のことであり、公開・非公開とは違う話だと
|思ってました。
|実際、ヘルパーメソッドなどはprivateだけど絶賛公開していることも
|ありますし、逆に公開したくないんだけどレシーバつけて呼び出すから
|privateはつけられないようなメソッドもあります。

Rubyではprivateは公開・非公開ではなくて、「外」から直接呼び
にくいという意味です。

|上述のチケット (#2366) ではこの機能が導入されることが決定している
|ようですが、その場合、
|・定数 (クラス) に private をつけると、それは「非公開」を意味する
|・メソッドに private をつけると、それは「レシーバが指定できない」を意味する
|というようになり、privateが複数の意味を持つことになって混乱しそうな
|気がしました (ちょうどC言語での "static" のように)。

定数にprivateを付けると「::」で「外から」直接アクセスできな
くなります。「外から直接呼びにくい」という状態はメソッドの
privateとの類推が効くと思いますが、いかがでしょう。

個人的にはprivateだから「非公開」というのは言葉のアヤで、桑
田さんの仰るような意味ではなかったと思います。

                                まつもと ゆきひろ /:|)

In This Thread