2015-04-05 216 views
0

不叫我嘗試這種代碼:區塊紅寶石

def m 
    return yield if block_given? 
    "no block" 
end 

puts m do 
    x = 2 
    y = 3 
    x*y 
end 

輸出怎麼會是「不堵」? 我對m構造塊的方式有什麼問題? {「testing」}會起作用。

+0

這已在[Ruby Block Syntax Error](http://StackOverflow.Com/q/6854283/)中得到解答,[傳遞給'each'的代碼塊與括號一起使用,但不與'do'-'end '(ruby)](http://StackOverflow.Com/q/6718340/),[塊定義 - 大括號和'''''''end'之間的區別?](http://StackOverflow.Com/q/6179442/ ),[沒有'do''end的Ruby多行塊]](http://StackOverflow.Com/q/3680097/),[使用'do'塊vs括號'{}'](http://StackOverflow.Com/q/2122380 /),[這些塊的編碼風格在Ruby中的區別或價值是什麼?](http://StackOverflow.Com/q/533008/),... – 2015-04-05 12:26:42

+0

... [Ruby塊和unparenthesized參數](http ://StackOverflow.Com/q/420147/),[爲什麼'do' /'end'和'{}'總是等價的?](http://StackOverflow.Com/q/7487664/),[ Ruby塊中的奇怪缺陷](http://StackOverflow.Com/q/7620804/),[將塊傳遞給方法 - Ruby](http:/ /StackOverflow.Com/q/10909496/),['instance_eval' block not supplied?](http://StackOverflow.Com/q/12175788/),[block syntax differences cause「LocalJumpError:no block given(yield) '']](http://StackOverflow.Com/q/18623447/),... – 2015-04-05 12:27:43

+0

... ['instance_eval'不能與'do' /'end'塊一起使用,只能使用'{}'-blocks](http: //StackOverflow.Com/q/21042867/),[''proc'在與'do'' end'一起使用時拋出錯誤](http://StackOverflow.Com/q/25217274/)。 – 2015-04-05 12:28:06

回答

1

添加括號puts

puts(m do 
    x = 2 
    y = 3 
    x * y 
end) 

輸出爲6

您的代碼就相當於

puts(m) do 
    x = 2 
    y = 3 
    x * y 
end 
+0

謝謝。但是如何使m {「testing」}起作用? – meizin 2015-04-05 04:40:19

+0

我現在知道了。謝謝:) – meizin 2015-04-05 04:53:18

1

刪除puts

def m 
    return yield if block_given? 
    "no block" 
end 

m do 
    x = 2 
    y = 3 
    x*y 
end 

它將始終返回m塊中的最後一條語句。