Ruby:将可变数量的参数(包括可选 block )转发到不同的函数

标签 ruby optional-parameters

我正在使用一个库函数,可以通过多种方式调用它 - 使用可变数量的参数、 block 或两者,即以下所有调用都是有效的:

libfunc
libfunc(1,2,3)
libfunc { 1 }
libfunc(1,2,3,4,5) { 6 }

现在我会编写一个函数,它接受与 libfunc 相同的参数,使用这些参数(包括 block )调用 libfunc,但对此进行一些预处理和后处理。

我最终得到了这段代码:

def mylibfunc(*args)
  # .... do preprocessing
  if block_given?
    libfunc(*args) {yield}
  else
    libfunc(*args)
  end
  # .... do postprocessing
end

我觉得这个设计很丑。有没有办法以更简洁的方式编写此内容,避免 block_given?查询?

最佳答案

您可以指定block argument通过 & 并将其传递给另一个方法:

def mylibfunc(*args, &block)
  libfunc(*args, &block)
end

关于Ruby:将可变数量的参数(包括可选 block )转发到不同的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31182309/

相关文章:

ruby-on-rails - Ruby 1.9.2 中的 Process.fork 和 Process.spawn 有什么区别

ruby - 在 ruby​​ 中使用索引分区数组

delphi - 为什么缺少可选参数会导致 "Incompatible types"错误

powershell - 使用了哪个参数集?

OSX 上的 python 和 echo -n

ruby-on-rails - 在 Rails 6.1 上使用咖啡装载机时出现 `this.getOptions is not a function` 错误

ruby - 在我的 Mac 上安装 ruby​​ gem json 时遇到问题

c# - 方法中的可选参数不是矩形的编译时常量错误

R - deSolve,参数

具有三个可选参数但一个必需参数的 PHP 类构造?