例如,我有如下代码:
case opt
when "opt1"
method1(param1, param2)
when "opt2"
method2(param1, param2, param3)
end
请教有没有好方法避免使用case...when,这里每个when里面调用的处理方法传的参数也是不一样的。动态方法调用?用block是否可行?
用动态方法调用,方法名和参数列表提前配置在一个hash中可以达到要求。不知道用block/lambda/proc之类的能否做到?
巴扎黑2017-04-22 08:58:14
大丈夫です。
詳細については、『Ruby メタプログラミング』という本を読んでください。それを抽象化する方法を教えてくれます。
ここでは、daily_report、monthly_report、weekly_reportの 3 つのスコープを定義しました
上記のコードは、3 つの関数の名前を動的に生成し、それらにパラメーターを渡します。
ここでは多くのパラメータを指定できます。最初のパラメータはメソッド名で、次のパラメータはすべてメソッドに必要なパラメータです。
その後、関数が同じものであれば、opt に基づいて特定の関数を生成できます。パラメーターにはオプションのパラメーターを使用するだけです。
Ruby は任意の数のパラメータを受け入れます。メソッドのコードでは、パラメータの前に * 記号を追加する必要があります。このパラメータは、この位置に渡される 0 個以上のパラメータを含む配列として表されます。