11

Builder :: XMLMarkupを試してxmlをビルドしようとしていますが、xmlに空の要素が追加され続けています。

なぜこれを行うのですか、どうすれば停止できますか?

xml = Builder::XmlMarkup.new
=> <inspect/> 
4

2 に答える 2

19

Buildermethod_missingは、メソッド呼び出しの名前で指定されたタグを追加するバージョンを実装します。

irb(またはrailsのコンソール)でプレイしていると仮定すると、式(など)を評価するときのirbのデフォルトの動作は、表示する文字列を生成するために、式Builder::XmlMarkup.newを呼び出すことです。inspectビルダーの場合inspect、通常のルビーinspectメソッドではありません-それはフォールスルーしmethod_missingてタグを追加します。

これは、ルビーをインタラクティブにプレイする場合にのみ発生します。あなたは次のようなことをすることができます

xml = Builder::XmlMarkup.new; false

ここで、式の結果は、falseirbがそれinspectを呼び出し、ビルダーオブジェクトをそのままにしておくことです。

これを継続的に行うのは厄介な場合があります。もし、するなら

xml = Builder::XmlMarkup.new; false
def xml.inspect; target!; end

そのxml場合でも、irbによって検査されたときにそのコンテンツを表示するビルダーオブジェクトになります。inspect(を使用する以外に)と呼ばれるタグを作成することはできませんがtag!、それは通常、小さな不便です。

于 2012-08-15T14:50:19.000 に答える
6

それでも出力を確認したい場合:

xml = Builder::XmlMarkup.new; xml.target!
于 2013-08-27T08:33:02.150 に答える