这个问题严格来说是优雅地调用一个方法,其中包含可变数量的" hashified"参数。
我有这个方法:
def meth(a, b, c={})
...
end
我通常称之为:
meth(123, 456, arg1: 234, arg2: 543)
不应以任何方式,形式或方式更改方法定义。
现在,如果某个条件为假,我希望跳过args: 543
。
伪代码,不是有效的Ruby:
meth(123, 456, arg1: 234, cond ? (arg2: 543) : () )
这个是否有非常优雅,简短易懂的语法,而无需更改或修改方法定义?
明显的解决方案就是......
args = { arg1: 234 }
args[:arg2] = 543 if cond
meth(123, 456, args)
太丑了。
meth(123, 456, {arg1: 234}.merge(cond ? {arg2: 543} : {}))
没关系,但是......好吧......当实际代码稍微长一点时,不会100%可读。* / / p>
我尝试使用*
和**
运算符,但找不到更好的解决方案。
答案 0 :(得分:2)
我认为你应该采用ugly
解决方案。您应该优先考虑简单性和可读性,而不是代码智能性。
要回答您的原始问题,您可以执行以下操作:
args = { arg1: 234, arg2: (543 if cond) }
meth(123, 456, args)
答案 1 :(得分:0)
我会使第三个参数成为执行必要条件的方法调用。
meth(123, 457, check_cond(234, 543, object-that-contains-conditionals-data));
这比其他选择更清晰,更漂亮。