Ruby:仅当非空时才将选项传递给方法

时间:2011-03-10 16:12:03

标签: ruby

我给了一个哈希self.options(可能是空的)和一个方法名。现在我需要调用方法,传入选项哈希,如下所示:

obj.send(method_name, ...args..., self.options)

但是我想支持调用根本不期望选项哈希的方法。因此,如果没有给出选项(self.options.empty?),我想将空哈希传递给方法。我能想到的最好的是:

obj.send(method_name, ...args..., *(self.options.empty? ? [] : [self.options]))

这有更好的习语吗?

2 个答案:

答案 0 :(得分:6)

如果选项为空,则不需要[]。 * nil返回该位置的空白。

这会有用吗?

obj.send(method_name, ...args..., *([self.options] unless self.options.empty?))
顺便说一下,你可以省略自己,所以你可以拥有

obj.send(method_name, ...args..., *([options] unless options.empty?))

答案 1 :(得分:0)

obj.send(method_name, ...args..., *([self.options.presence].compact))

或@sawa如何提及,你可以扔掉self

obj.send(method_name, ...args..., *([options.presence].compact))