3.times {puts "Hello"}
Hello
Hello
Hello
我們把它理解爲times
是Integer
類中的函數,接受block
作爲參數。
我試圖挖掘並發現它並不那麼簡單。
如果它是times
是在一個方法調用的函數,並且括號中的情況下是可選的我試圖用它來驗證:
3.times({puts "Hello"})
扔明顯的錯誤:
SyntaxError: (irb):3: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '(' 3.times({puts "Hello"}) ^ (irb):3: syntax error, unexpected '}', expecting end-of-input 3.times({puts "Hello"}) ^ from /home/ashish/.rvm/rubies/ruby-2.0.0-p353/bin/irb:12:in `'
進一步調查:
a = 3.times
puts a.class
輸出Enumerator
th意味着3X是一個Enumerator
類對象。
有人可以用這背後的確切概念來解釋整個事情嗎?
塊「參數」是句法糖;如果你在parens裏面做,它會試圖解析爲一個散列。 –
如果我們在這種情況下嘗試「3.times(do puts」hello「end)」,那麼爲什麼它會試圖將其解析爲散列值? –
'3.times(&proc {puts「Hello」})' –