我有一种方法可以产生如下结果:

def a_method(*params)
  # do something
  yield
  # do something else
end

我希望这个方法在传入块时产生块;如果没有传递任何块,则该方法应该在不崩溃的情况下跳过yield sentense,比如:

 no block given (yield) (LocalJumpError)

当然,最直接的方法是将方法更改为:

def a_method(*params, &block)
  # do something
  yield if block
  # do something else
end

但难道没有更漂亮的方式吗?

推荐答案

是的!:)

def a_method(*params)
  # ...
  yield if block_given?
  # ...
end

Ruby相关问答推荐

如何保证散列中的对象不完全相同

PDFNet:Ubuntu 16.04 和 Ubuntu 20.04 上 PDF 输出文本的词序不同

这是一个很好的测试?规范

在 Ruby 中,如何编写一个可以与 &:symbol 一起使用的简单方法?

Ruby open-uri 重定向被禁止

Ruby数组中的`return`#map

查明 IP 是否在 IP 范围内

Ruby 中数组和哈希的性能

在 Ruby 中创建数字、字符串、数组或哈希的 md5 哈希

为什么 Ruby 使用 respond_to?而不是 responds_to?

使用 bundler 安装较新版本的 bundler

将字符串与多个模式匹配

Puppet/Facter无法检索事实 fqdn:如何修复或规避?

警告! PATH 设置不正确,通常这是由 shell 初始化文件引起的

HAML 中 Javascript 中的 Ruby 方法

何时使用在 Ruby 中启动子进程的每种方法

为什么在安装 gem 时出现权限被拒绝错误?

Ruby:捕获异常后继续循环

如何使用 Ruby-Rails 删除文件夹的所有内容?

如何在 Capistrano v3 的服务器上运行 shell 命令?