この質問は、厳密にはについてのものです。簡潔には、は、さまざまな量の "ハッシュ化された"引数を持つメソッドを呼び出します。メソッド呼び出しのオプションのキー/値
背景
私はこの方法を持っている:
def meth(a, b, c={})
...
end
私は通常、このようにそれを呼び出す:
meth(123, 456, arg1: 234, arg2: 543)
メソッドの定義はどのような方法、フォームやファッションで変更すべきではありません。
問題
は、今私は、特定の条件がfalseの場合args: 543
をスキップしたいです。
擬似コードではなく、有効なルビー:
meth(123, 456, arg1: 234, cond ? (arg2: 543) :())
は、メソッド定義を変更したり、monkeypatchingせずに、このの構文を理解することは非常に、エレガントに短いかつ簡単にありますか?私のようなものになるだろう
明白な解決策を試してみました何
...args = { arg1: 234 }
args[:arg2] = 543 if cond
meth(123, 456, args)
あまりにも醜いです。
meth(123, 456, {arg1: 234}.merge(cond ? {arg2: 543} : {}))
実際にコードが少し長くなると、最初のグレースで100%読めるわけではありません。
私は*
と**
オペレータで遊んでみましたが、それ以上の見た目の解決策は見つかりませんでした。
「あまりにも醜い」 - それは行く方法です。 –
'meth(123,456、arg1:234、arg2:(cond)if))'は有効なルビーですが、あなたの最後の試みはより良いと思います。 – Ilya
@AndreyDeinekoら:私は感想を感謝します。この質問は一般的なプログラミングのパラダイムではなく、非常に具体的なものであり、私は非常に明確な問題と考えています。私は「カチンカの法律」を認識していますが、質問の無効性を私に納得させる必要はありません。どのような良いアイデアが上がるかわからない! – AnoE