在类范围内运行Ruby Proc

时间:2018-01-25 03:31:53

标签: ruby functional-programming

我一直在思考如何向特定实例添加行为 Ruby中的一个类。如果我使用如下所示的instance_exec,则调用proc的方法不会一直执行。

class HasSecret
    def initialize(x)
        @secret = x
    end

    def doTheThing(&block)
        puts "before block"
        instance_exec(@secret, &block)
        puts "after block"
    end
end

foo = HasSecret.new(5)
foo.doTheThing do |x|
        puts "x"
        return x
end

这个例子简单地给出了:

  阻止之前

     

5

这样做是否有任何方法?

1 个答案:

答案 0 :(得分:1)

试试这个:

foo.doTheThing do |x|
  puts x
end

通常,您不应该在块中return。在块中调用return将导致返回的方法产生(封闭),这通常不是所需的行为。它也可以是LocalJumpError

事实上,因为这种情况非常细致且不常见,很多人说你不能 return来自一个街区。在此问题的答案评论中查看对话,例如:Unexpected Return (LocalJumpError)

在你的情况下,你没有看到“after block”put,因为传递的块中的返回导致doTheThing在到达之前返回。