From: Kentaro KAWAMOTO Date: 2007-06-19T18:42:06+09:00 Subject: [ruby-list:43631] クラス名の衝突 川本と申します。 Rails を使ったウェブアプリの中で、 ruby-htmltools (http://bike-nomad.com/ruby/) を使っています。 そうすると、assert_tag を使ったテストに失敗するようになりました。 ---------------------------------------------------------------- ArgumentError: wrong number of arguments (6 for 2) /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_controller/assertions/../vendor/html-scanner/html/node.rb:199:in `initialize' ---------------------------------------------------------------- この原因は、 HTML::Tag というクラスが、 actionpack と ruby-htmltools の両方で定義されており、 initialize の引数の数が異なるからなのですが、 このような場合、どういう対処方法がありますでしょうか? わたしが考え付くのは、 「書き換え易い方 (例えば ruby-htmltools) を書き換えて、 HTML2::Tag というクラス名に変更する。」 というものですが、かなり手間がかかります。 以前に、[ruby-list:41596] で、 module 名の衝突について質問させていただき、 [ruby-list:41600]で 「module 名を変更する」という方法を教えていただきました。 しかし今回は、ruby-htmltools がそこそこ複雑なライブラリで、 その中で HTML::Tag を参照している箇所があるので、 モジュール名のみ変更すると、ruby-htmltools 自体が 動かなくなってしまうと思います。 Ruby, Perl などでは、ライブラリに HTML::Tag というような 名前をつけることは一般的なようで、 衝突する可能性は高いと思うのですが、 みなさんがどのように回避しているのか 教えていただければ幸いです。 よろしくお願いします。 --- Kentaro KAWAMOTO mailto:kentaro.kawamoto@gmail.com