更改ruby块中调用的代码的范围

更改ruby块中调用的代码的范围,ruby,scope,Ruby,Scope,假设我有一个如下所示的方法: def do_something (&code) code.call end 现在我想用它在外部范围内设置一个变量 do_something do foo = 'bar' end puts foo #=>undefined 这显然是因为foo是在do_something方法的范围内定义的,如何让它在外部范围内填充?我建议您不要使用这种方法。基本上,您不应该希望将内部范围扩展到外部。更好的做法是从块中返回一些状态 def do_som

假设我有一个如下所示的方法:

def do_something (&code)
    code.call
end
现在我想用它在外部范围内设置一个变量

do_something do
    foo = 'bar'
end
puts foo #=>undefined

这显然是因为foo是在do_something方法的范围内定义的,如何让它在外部范围内填充?

我建议您不要使用这种方法。基本上,您不应该希望将内部范围扩展到外部。更好的做法是从块中返回一些状态

def do_something (&code)
  code.call
end

foo = do_something do
  'bar'
end

p foo
#=> bar

我建议你不要使用这种方法。基本上,您不应该希望将内部范围扩展到外部。更好的做法是从块中返回一些状态

def do_something (&code)
  code.call
end

foo = do_something do
  'bar'
end

p foo
#=> bar