0

私はメタプログラミングRubyの本を読んでいますが、理解できない方法があります。

def to_alphanumeric(s)
  s.gsub /[^\w\s]/, ''
end

最近呼び出され、奇妙な式に変換される引数変数があるのがわかりますか?この方法で正確に何ができますか、彼は役に立ちますか?

次の方法で問題なく動作します。

def to_alphanumeric(s)
  s.gsub %r([aeiou]), '<\1>'
end

p = to_alphanumeric("hello")
p p
>> "h<>ll<>"

しかし、メソッドをクラスにアップグレードし、メソッド+ argv to_alphanumericを呼び出すだけでは、機能しなくなります。

class String 
  def to_alphanumeric(s)
    s.gsub %r([aeiou]), '<\1>'
  end
end
p = to_alphanumeric("hello")
p p
undefined method `to_alphanumeric' for String:Class (NoMethodError)
4

2 に答える 2

1

ドキュメントをチェックするのは痛いですか?

http://www.ruby-doc.org/core-2.0/String.html#method-i-gsub

2番目の引数の代わりに出現するすべてのパターンを含むstrのコピーを返します。

/ [^ \ w \ s] /パターンは、「単語または空白以外のすべて」を意味します

于 2013-03-01T10:31:12.147 に答える
1

Rubularを見てください。正規表現/[^\w\s]/は、単語文字 (\w) でも空白文字 (\s) でもない ^、/、または $ などの特殊文字に一致します。したがって、関数は ^、/、または $ などの特殊文字を削除します。

>> "^/$%hel1241lo".gsub /[^\w\s]/, ''
=> "hel1241lo"

関数のように単純に呼び出します。

>> to_alphanumeric("U.S.A!")
=> "USA"
于 2013-03-01T11:00:38.740 に答える