例如,我有如下代码:
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 Metaprogramming 책을 읽어보세요. 추상화하는 방법을 알려줄 것입니다.
여기서는 세 가지 범위 daily_report Monthly_report Weekly_report를 정의했습니다
위의 코드는 세 가지 함수의 이름을 동적으로 생성한 다음 해당 함수에 매개변수를 전달합니다.
여기에는 다양한 매개변수가 제공될 수 있습니다. 첫 번째 매개변수는 메소드 이름이고, 다음 매개변수는 메소드에 필요한 모든 매개변수입니다.
그런 다음 기능이 동일한 경우 opt를 기반으로 특정 기능을 생성할 수 있습니다. 매개변수에는 선택적 매개변수를 사용하세요.
Ruby는 원하는 수의 매개변수를 허용합니다. 매개변수 앞에 * 기호를 추가해야 합니다. 메소드 코드에서 이 매개변수는 이 위치에 전달되는 0개 이상의 매개변수를 포함하는 배열로 표시됩니다.