From: Yusuke ENDOH Date: 2010-01-29T23:21:32+09:00 Subject: [ruby-dev:40243] Re: [Feature #2366] private constant 遠藤です。 2010年1月29日20:30 Masatoshi SEKI : >> >>>>> 今の Ruby には、クラスが公開 API かどうかを伝える手段がドキュメント >>>>> しかありません。そのため、ERB::Compiler など、ライブラリの中の公開 >>>>> でない (と思われる) inner class を外から自由に参照できてしまいます。 > > すみません。教えて下さい。 > > 非公開クラスというのは、rubyspecよ、テストコードを書かないで!という > 宣言をするものですか? > > それとも、アプリケーションが使ったり動的に定義をかえてはいけません、 > という宣言をするものですか? 両方のつもりです。 > たとえば、ERB::Compilerでしたら、specを書いてほしいとは思わないけど > アプリケーションで定義を書き換えて、ERBの挙動を変えるのは止めさせたい > とまでは思いません。 元の提案 [ruby-dev:39685] に書きましたが、「非公開というのは承知の上で 敢えて使いたい」という要求を封じるものではありません。使うのに一手間 かかるようになるだけです。一手間かけることで、自分が自分の足を撃とうと していることを自覚してもらおうという狙いです。 > もしERBの実装が変わってしまってその書き換えをするコードが動かなくなって > しまうのは、仕様が変わった、と納得してもらっても良いような気がします。 納得してくれる人はいいんですけどね。rubyspec の様子を見ると、そういう 牧歌的な期待は難しい気がしています。 普通に見えるものは何でも spec にされてしまう例として、以下のような spec があります。(private constant には関係ないですが……) http://github.com/rubyspec/rubyspec/blob/master/library/erb/src_spec.rb つまり、ERB#src の返り値を固定文字列で spec にしているという。1.9 で失敗 してるんですが、どう対処したものでしょう。 -- Yusuke ENDOH