相关疑难解决方法(0)

在Ruby块中使用'return'

我正在尝试将Ruby 1.9.1用于嵌入式脚本语言,以便"最终用户"代码在Ruby块中编写.这个问题的一个问题是我希望用户能够在块中使用'return'关键字,因此他们不需要担心隐式返回值.考虑到这一点,这是我希望能够做到的事情:

def thing(*args, &block)
  value = block.call
  puts "value=#{value}"
end

thing {
  return 6 * 7
}
Run Code Online (Sandbox Code Playgroud)

如果我在上面的例子中使用'return',我会得到一个LocalJumpError.我知道这是因为有问题的块是Proc而不是lambda.如果我删除'return',代码就可以工作,但我真的更喜欢在这种情况下使用'return'.这可能吗?我已经尝试将块转换为lambda,但结果是一样的.

ruby lambda return proc-object

83
推荐指数
3
解决办法
5万
查看次数

Ruby Lambda 与 Proc LocalJumpError

Ruby 和 StackOverflow 新手在这里使用 Ruby 进行工作,并遇到了我的第一个主要障碍。我真的很难理解 Procs 和 Lambdas。这是我正在使用的代码。

def procBuilder(message)
  Proc.new{ puts message; return}
end

def test
  puts "entering method"
  p = procBuilder("entering proc")
  p.call
  puts "exit method"
end

test
Run Code Online (Sandbox Code Playgroud)

按照设计,这是为了抛出 LocalJumpError,但我不明白为什么。如果我不得不猜测这是做什么的,我猜它最初会在 p = procBuilder("entering proc") 运行时打印“entering proc”,然后在 p.call 上抛出错误,因为 p.call 没有传递任何字符串,但显然我错过了这两行之间发生的一些关键事情。我也不完全理解为什么这适用于 lambda 而不是 proc,但我想理解错误也能解决该问题。

预先感谢您的澄清

ruby proc-object

4
推荐指数
1
解决办法
1075
查看次数

标签 统计

proc-object ×2

ruby ×2

lambda ×1

return ×1