Tag: proc

为什么明确的回报在Proc中有所作为?

def foo f = Proc.new { return "return from foo from inside proc" } f.call # control leaves foo here return "return from foo" end def bar b = Proc.new { "return from bar from inside proc" } b.call # control leaves bar here return "return from bar" end puts foo # prints "return from […]

在Ruby块中使用“返回”

我正在尝试将Ruby 1.9.1用于embedded式脚本语言,以便将“最终用户”代码写入Ruby块中。 与此相关的一个问题是,我希望用户能够在块中使用“返回”关键字,所以他们不需要担心隐式返回值。 考虑到这一点,这是我希望能够做的事情: def thing(*args, &block) value = block.call puts "value=#{value}" end thing { return 6 * 7 } 如果我在上面的例子中使用'return',我得到一个LocalJumpError。 我知道这是因为有问题的块是Proc而不是lambda。 代码的作品,如果我删除“返回”,但我真的希望能够在这种情况下使用“返回”。 这可能吗? 我已经尝试将块转换为lambda,但结果是相同的。

为什么我们需要纤维

对于纤维我们有一个经典的例子:生成斐波那契数 fib = Fiber.new do x, y = 0, 1 loop do Fiber.yield yx,y = y,x+y end end 为什么我们需要纤维? 我可以用相同的Proc重写这个(实际上是closures的) def clsr x, y = 0, 1 Proc.new do x, y = y, x + y x end end 所以 10.times { puts fib.resume } 和 prc = clsr 10.times { puts prc.call } 将返回相同的结果。 […]

何时使用lambda,何时使用Proc.new?

在Ruby 1.8中,proc / lambda和Proc.new之间有细微差别。 这些差异是什么? 你可以给如何决定哪一个select的指导方针? 在Ruby 1.9中,proc和lambda是不同的。 这是怎么回事?