84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
例如,我有如下代码:
case opt when "opt1" method1(param1, param2) when "opt2" method2(param1, param2, param3) end
请教有没有好方法避免使用case...when,这里每个when里面调用的处理方法传的参数也是不一样的。动态方法调用?用block是否可行? 用动态方法调用,方法名和参数列表提前配置在一个hash中可以达到要求。不知道用block/lambda/proc之类的能否做到?
欢迎选择我的课程,让我们一起见证您的进步~~
可以的。 具体的你可以看Ruby元编程这本书。里面会告诉你怎么抽象的。
method_name = "#{params[:type]}_report" @orders = Order.done.send(method_name,params[:month],params[:year]) rescue Order.done.send("daily_report")
这里我有定义了三个scope daily_report monthly_report weekly_report 上面代码动态生成了三个函数的名字,然后传了参数给他们。
a.send(method_name,arg1,arg2,...)
这里就可以给很多个参数。第一个参数是方法名称,以后的都是方法需要的参数。 然后你这边就可以根据opt来生成具体的函数,如果函数是一样的东西的话。参数用可选参数就好了。 Ruby中接受任意数目的参数,要在某个参数前加上一个*号,在方法的代码中,这个参数表示成一个数组,它包含传给这个位置上的0个或多个参数。
def haha(a *b) puts a end
可以的。
具体的你可以看Ruby元编程这本书。里面会告诉你怎么抽象的。
这里我有定义了三个scope daily_report monthly_report weekly_report
上面代码动态生成了三个函数的名字,然后传了参数给他们。
这里就可以给很多个参数。第一个参数是方法名称,以后的都是方法需要的参数。
然后你这边就可以根据opt来生成具体的函数,如果函数是一样的东西的话。参数用可选参数就好了。
Ruby中接受任意数目的参数,要在某个参数前加上一个*号,在方法的代码中,这个参数表示成一个数组,它包含传给这个位置上的0个或多个参数。