2

この単純なRubyコードを定期的に実行すると、正常に機能します。

class String
  def add_two
    self + "2"
  end
end
puts "hello".add_two

必要に応じて「hello2」を出力します。しかし、これは失敗します:

:ruby
  class String
    def add_two
      self + "2"
    end
  end
  puts "hello".add_two

このコードはエラーを生成します:

NoMethodError at /
undefined method `add_two' for "hello":String

何が問題なのですか?

(それが重要かどうかはわかりませんが、Passengerモジュールを使用してApacheで実行されているSinatraでHAMLを使用しています。)

4

2 に答える 2

2

Stringは別の名前空間にあり、そのために別のクラスにあることをお勧めします。

それはどうなりますか?

class ::String
于 2013-03-09T13:23:13.460 に答える
1

RailsアプリのHamlビューの1つにコードをそのまま入れたところ、別のエラーが発生しました。

SyntaxError at /
class definition in method body

それで、文句を言っているのはHamlの:rubyフィルターなのかと思いましたが、「フィルター処理されたテキストを通常のRubyインタープリターで解析する」ので、そうは思われませんでした。そこで、エラーに関する詳細情報を検索し、これにつながる参照(以下を参照)を見つけました。これは機能します(ただし、実際には使用しないでください)。

:ruby
  String.module_eval do
    def add_two
      self + "2"
    end
  end
  puts "hello".add_two

参照:

于 2013-03-09T13:22:54.177 に答える