ruby - 如果方法内部有 yield,但没有传递 block 怎么办?

标签 ruby block yield

<分区>

如果你使用一个有 yield 的方法,但没有向它传递一个 block ,会发生什么?

class SomeClass < Array
    def some_method
        yield(self[i])
    end
end

a = SomeClass.new
a.some_method

有没有办法设置默认行为:如果没有给出其他方法,则让方法默认 block 运行?

最佳答案

您可以使用 Kernel#block_given?确定 block 是否通过并采取适当的操作。

class SomeClass < Array
  def some_method
    if block_given?
      yield(self[i])
    else
      # not given
    end
  end
end

这意味着如果未通过阻止,您也可以执行默认操作。

关于ruby - 如果方法内部有 yield,但没有传递 block 怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34096157/

相关文章:

ruby-on-rails - 有条件地生成回形针附件的样式

mysql - 使用 activerecord ruby​​ 计数不同

ruby-on-rails - 如何将 youtube 框架添加到 ERB 文件

php - block 和模板如何在 Magento 中工作

css - Drupal View 不使用 css 类

C#: yield 返回范围/集合

ruby-on-rails - 在 ruby​​ sqlite3 中更改列日期列格式

javascript - 将 D3 block 转换为 Enyo 组件

F# yield ! (yieldbang) 运算符

Python yield 语句每次都返回相同的值