0

Metaprogramming Ruby でこのコードを見ました

class String
  def to_alphanumeric
    gsub /[^\w\s]/, ''
  end
end

ここでは、句読点を空白で置き換える to_alphanumeric メソッドを標準クラス String に追加します。私が混乱しているのは、gsub がどのオブジェクトで動作するかを指定していないため、Ruby はここで gsub が他の何かではなく String obj 自体で動作することを実際に意味することをどのように認識しているのでしょうか? 言い換えれば、Ruby は自動的に self.gsub に書き換えますか?

4

1 に答える 1

7

Ruby の暗黙のレシーバーは常にself(selfもちろん、コンテキストによって異なります)。

明示的なレシーバーを使用してプライベート メソッドを呼び出すと例外が発生するため (とにかくここではパブリック メソッドです)、 Ruby はそれ自体self.gsubを「自動的に書き換える」ことはしません。selfgsub

于 2013-03-23T20:56:59.313 に答える