【问题标题】:Ruby: Forwarding variable number of parameters including optional block to a different functionRuby:将可变数量的参数(包括可选块)转发到不同的函数
【发布时间】:2015-07-02 10:39:04
【问题描述】:

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

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?查询?

【问题讨论】:

    标签: ruby optional-parameters


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!如果没有块传递给 mylibfunc,我认为这种转发是行不通的,但它当然必须这样做!傻我!
    猜你喜欢
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多