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

Ruby:将可变数量的参数(包括可选块)转发到不同的函数,ruby,optional-parameters,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 blo

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

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
我觉得这个设计很难看。有没有一种方法可以更简洁地写这篇文章,避免给出的块?查询?

您可以指示一个by&并将其传递给其他方法:

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

谢谢我认为如果没有块被传递给mylibfunc,这个转发就不会工作,但当然它必须这样做!我真傻!