塊和過程和 Lambdas
如果有一個連結多個方法的行,請注意運算子優先順序,例如:
str = "abcdefg"
puts str.gsub(/./) do |match|
rand(2).zero? ? match.upcase : match.downcase
end
不像你期望的那樣列印像 abCDeFg
這樣的東西,而是列印像 #<Enumerator:0x00000000af42b28>
這樣的東西 - 這是因為 do ... end
的優先順序低於方法,這意味著 gsub
只能看到/./
引數,而不是塊引數。它返回一個列舉器。該塊最終傳遞給 puts
,忽略它並只顯示 gsub(/./)
的結果。
要解決此問題,請將 gsub
呼叫括在括號中或使用 { ... }
代替。