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