我试过这段代码:
def m
return yield if block_given?
"no block"
end
puts m do
x = 2
y = 3
x*y
end
为什么输出是"没有阻止"? 我将这个块构建到m的方式有什么问题? {" testing"}将起作用。
答案 0 :(得分:1)
将括号添加到puts
puts(m do
x = 2
y = 3
x * y
end)
输出为6。
您的代码等同于
puts(m) do
x = 2
y = 3
x * y
end
答案 1 :(得分:1)
删除puts
:
def m
return yield if block_given?
"no block"
end
m do
x = 2
y = 3
x*y
end
它将始终返回m
块中的最后一个语句。