From: Masatoshi SEKI Date: 2008-02-11T05:14:10+09:00 Subject: [ruby-dev:33695] Re: erb.rb の仕様について 咳といいます。 On 2008/02/11, at 2:47, Makoto Kuwata wrote: > それでは、Thread を使うかどうかは仕様ではなく、 > 「safe_level を設定したときにそれがメインプログラムの > $SAFE に影響を及ぼさないこと」が仕様だという理解で > よろしいでしょうか。 はい。 >>> >>> 2. 以下のメソッドやモジュールは #:nodoc: がついてま >>> すが、 >>> これらは非公開であり積極的に使うべきでないと考えて >>> いいでしょうか。 >>> もっというと、これらをERBの仕様と考えていいかどうかと >>> いうことなんですが。 >>> - ERB#def_method >>> - ERB#def_module >>> - ERB#def_class >>> - ERB::DefMethod >> >> >> これらは積極的に使ってほしいメソッドです。 >> >> rdocについてはどなたかが書いてくれたもので、公開(?)と関 >> 連はありません。 >> >> 気分的には、ERB::Compiler関連が非公開(といっても >> Rubyなので実質公開)です。 >> ERB::Compilerを改造しても怒られないだろうなあ、と期待してます。 >> > > なんと、erb.rb の正式な仕様でしたか。了解しました。 > では :nodoc: は取り除いた方がいいですね。 rdocへのパッチは全て取り込むつもりです。 ぜひ適切なrdocを送ってください! > みなさん >>> >>> 3. ERB#set_eoutvar() って必要でしょうか? >>> ERB#initialize() の引数 _eoutvar を使えば変数名 _erbout >>> は >>> 変更できるから、set_eoutvar() は必要ないように思い >>> ます。 >> >> すっかり忘れていましたが、_erboutは変数名しか設定できな >> いから >> メソッドにしてフックできるようにしたようです。 >> >> * http://www.druby.org/ilikeruby/erbquote.html >> * http://d.hatena.ne.jp/m_seki/20061031#1162304780 > > これって、非公開としている Compiler オブジェクトが > 引数に必要なんですよね。設計としてはあんまりよろしく > ないと思いますが、どうでしょうか。 そういうものなのですか。 compilerに対するセットアップをCompilerに持たせたくなくて ERBに配置したんだけどだめでしょうか。 privateにしてくれ! なら同意します。 #「気分的には非公開」といっても実際には公開ですよね。 #Rubyなので好きなように実行時に手が入れられます。 #なので、どこをいじっても誰かが「ぎゃっ」と言うでしょう。 ERB互換classが書きにくいって話ですか? 私はerubisをパクってCompilerを改造しようと思ってます。 > > #そもそも set_eoutvar() は非公開メソッド? > #なら :nodoc: つけてほしいです。 > #丁寧にも RDoc がついているから、ERB の仕様だと > #思ってしまいました。 rdocのパッチを募集します! > > というか、オプション引数のことをまったく考慮していない > CGI#initalize() とは違って、ERB#initialize() は引数で > eoutvar を取るようにちゃんと設計されているので、 私はeoutvarもsafe_levelも失敗だったと思ってます。 もっとうまく使い方を誘導するべきでした。 > > ERB#eoutvar と ERB#eoutvar= はあってもいいと思いますが。 > > たとえばこんなのはどうでしょうか。要件を満たしているか > どうか分かりませんが。 Complierは一時的なコンテキストというか処理オブジェクトなので eoutver=では手遅れみたいです。