2013-08-22 79 views
0

) 我通過非常好的網站代碼學習紅寶石學校,但是在他們的一個例子中,我不明白方法和背後的邏輯,有人可以解釋我嗎?紅寶石代碼理解 - 來自代碼學校

非常感謝你;-)

下面是代碼

search = "" unless search 
games = ["Super Mario Bros.", "Contra", "Metroid", "Mega Man 2"] 
matched_games = games.grep(Regexp.new(search)) 
puts "Found the following games..." 
matched_games.each do |game| 
    puts "- #{game}" 
end 

我真的不明白1號線和3

search = "" unless search 

matched_games = games.grep(Regexp.new(search)) 

回答

1

下面的語句空字符串分配給search變量。

search = "" unless search 

本來這個任務不完成,Regexp.new會拋出一個TypeError有消息no implicit conversion of nil into String,或者如果搜索沒有定義,那麼NameError有消息未定義的局部變量或方法「搜索」 ......

在以下聲明:

matched_games = games.grep(Regexp.new(search)) 

games.grep(pattern)返回與模式匹配的每個元素的數組。詳情請參閱grepRegexp.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 = [] 

希望這是有道理的。

+0

它非常感謝thx你! – Ben2pop

0

搜索應該是實例正則表達式或零。在第一行搜索設置爲空字符串,如果它最初等於零。

在第三串matched_games被設置爲匹配於給定正則表達式字符串數組如果未定義searchhttp://ruby-doc.org/core-2.0/Enumerable.html#method-i-grep

+0

嘿THX的答案;-) 你能不能給我解釋一下ANF上的grep的Regexp.new之間的差異他們看起來有點類似嗎? – Ben2pop

+0

_Regexp.new_創建_Regexp_類的實例。 _grep_使用這個實例來過濾某個數組。 – hedgesky

0

vinodadhikary說的一切。我只是不喜歡的語法OP提到

search = "" unless search 

這是更好

search ||= "" 
+0

嘿thx你;-) 這正是代碼學校課程練習的目的 – Ben2pop

+0

哦,好像我已經通過它:) –