Ruby:将可变数量的参数(包括可选块)转发到不同的函数
Ruby: Forwarding variable number of parameters including optional block to a different function
我正在使用一个库函数,它可以通过多种方式调用 - 使用可变数量的参数、一个块或两者兼而有之,即以下所有调用都是有效的:
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?查询?
您可以通过 &
指示一个 block argument 并将其传递给其他方法:
def mylibfunc(*args, &block)
libfunc(*args, &block)
end
我正在使用一个库函数,它可以通过多种方式调用 - 使用可变数量的参数、一个块或两者兼而有之,即以下所有调用都是有效的:
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?查询?
您可以通过 &
指示一个 block argument 并将其传递给其他方法:
def mylibfunc(*args, &block)
libfunc(*args, &block)
end