0

我正在阅读 Metaprogramming Ruby 书,并且有一些我无法理解的方法:

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

我看到有参数变量(s),它最近被调用并转换为一些奇怪的表达式?我到底能用这种方法做什么,他有用吗?

以下方法工作得很好:

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

看一下Rubular,正则表达式/[^\w\s]/匹配特殊字符,如 ^、/ 或 $,它们既不是单词字符 (\w) 也不是空格 (\s)。因此,该函数会删除特殊字符,如 ^、/ 或 $。

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

像函数一样简单地调用它:

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

检查文档会不会很痛苦?

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

返回 str 的副本,其中所有出现的模式替换为第二个参数。

/[^\w\s]/ 模式的意思是“所有不是单词或空格的东西”

于 2013-03-01T10:31:12.147 回答