Ruby:转发可变数量的参数,包括可选块到不同的功能

时间:2015-07-02 10:39:05

标签: ruby optional-parameters

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

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

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

我最终得到了这段代码:

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

我发现这个设计很难看。有没有办法以更简洁的方式写这个,避免使用block_given?查询?

1 个答案:

答案 0 :(得分:2)

您可以&指示block argument并将其传递给其他方法:

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