【问题标题】:How to require a block in Ruby?如何在 Ruby 中要求一个块?
【发布时间】:2010-02-22 05:12:47
【问题描述】:

是否有任何内置方法要求将块传递给 Ruby 方法?我意识到如果block_given? 为假,我可以引发异常,但有更好的方法吗?

【问题讨论】:

    标签: ruby


    【解决方案1】:

    只需使用yield

    如果您在方法中包含yield,并且给出块,则会引发错误。

    把它放在一个文件中并运行它:

    def needs_block
        yield
    end
    
    needs_block
    

    它会抛出这样的错误:

    LocalJumpError: no block given
        from (irb):14:in `needs_block'
        from (irb):16
    

    【讨论】:

    • 那太容易了 :) 谢谢!
    【解决方案2】:
    raise 'need block' unless block_given?
    

    【讨论】:

    • 这是最好的答案,因为它没有副作用(即调用块)。
    【解决方案3】:

    如果你的方法需要一个块,Ruby 会提示它。 raise 关键字不需要阻塞,它只提示处理异常的消息。

    可以是上面例子中的方法

    def needs_block
     yield
    end
    

    needs_block

    或者你可能需要一个 Proc

    def needs_block(&Proc)
        proc.call
    end
    

    无论如何,添加 raise block_given?会很好。

    Here says

    "raise 方法来自 Kernel 模块。默认情况下,raise 创建 RuntimeError 类的异常。引发异常 特定的类,您可以将类名作为参数传递给 提高”。

    【讨论】:

      猜你喜欢
      • 2017-01-06
      • 2012-07-04
      • 2015-06-12
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 2012-11-28
      相关资源
      最近更新 更多