在Ruby中没有调用块

时间:2015-04-05 04:25:22

标签: ruby

我试过这段代码:

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

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

为什么输出是"没有阻止"? 我将这个块构建到m的方式有什么问题? {" testing"}将起作用。

2 个答案:

答案 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块中的最后一个语句。