以下语句将空字符串分配给search
变量 ifsearch
未定义。
search = "" unless search
如果未完成此分配,Regexp.new
则会抛出TypeError
带有消息no implicit conversion of nil into String
,或者如果未定义搜索,则NameError
使用消息未定义的局部变量或方法“搜索”...
在以下声明中:
matched_games = games.grep(Regexp.new(search))
games.grep(pattern)
返回与模式匹配的每个元素的数组。有关详细信息,请参阅grep。 Regexp.new(search)
从提供的变量构造一个新的正则表达式,该search
变量可以是字符串或正则表达式模式。同样,有关更多详细信息,请参考Regexp::new
所以说例如搜索是""
(空字符串),然后Regexp.new(search)
返回//
,如果搜索='超级马里奥兄弟' 然后Regexp.new(search)
返回/Super Mario Bros./
。
现在模式匹配:
# For search = "", or Regexp.new(search) = //
matched_games = games.grep(Regexp.new(search))
Result: matched_games = ["Super Mario Bros.", "Contra", "Metroid", "Mega Man 2"]
# For search = "Super Mario Bros.", or Regexp.new(search) = /Super Mario Bros./
matched_games = games.grep(Regexp.new(search))
Result: matched_games = ["Super Mario Bros."]
# For search = "something", or Regexp.new(search) = /something/
matched_games = games.grep(Regexp.new(search))
Result: matched_games = []
希望这是有道理的。