我試圖瞭解在使用block編寫代碼時管道內部的局部變量創建(|
)。並且在我的IRB
以下代碼中也嘗試過。ruby中`| x,y |`和`| x; y = 0 |`有什麼區別?
[1,2,3].each {|x;y| y=x; print y}
#123=> [1, 2, 3]
[1,2,3].each {|x;y = 0| y=x; print y}
#SyntaxError: (irb):1: syntax error, unexpected '=', expecting '|'
#[1,2,3].each {|x;y = 0| y=x; print y}
^
#(irb):1: syntax error, unexpected '}', expecting $end
# from C:/Ruby193/bin/irb:12:in `<main>'
但不明白髮生了什麼事與第二代碼,而第一個是完美的。
誰能告訴我|x,y| and |x;y=0|
之間的區別?希望這個 問題的答案對我有意義。
再下面我完美的作品:
a = "hello world".split(//).each{ |x,newstr = Array.new() | newstr = x.capitalize;puts newstr }
#H
#E
#L
#L
#O
#
#W
#O
#R
#L
#D
#=> ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d"]
請參閱我的更新。那麼爲什麼我們能夠在'|'中初始化數組對象呢? – 2013-03-11 10:43:05
看到我的答案,你可以設置參數塊的默認值,而不是'||'之間的局部變量塊。這就是爲什麼你最後的例子是有效的。 – toch 2013-03-11 10:44:13
好吧!這意味着'方法'也是阻止的,它允許默認值語法,但匿名塊不允許。 – 2013-03-11 10:47:46