lambda - Ruby中如何避免使用case...when
天蓬老师
天蓬老师 2017-04-22 08:56:14
0
1
899

例如,我有如下代码:

case opt
when "opt1"
  method1(param1, param2)
when "opt2"
  method2(param1, param2, param3)
end

请教有没有好方法避免使用case...when,这里每个when里面调用的处理方法传的参数也是不一样的。动态方法调用?用block是否可行?
用动态方法调用,方法名和参数列表提前配置在一个hash中可以达到要求。不知道用block/lambda/proc之类的能否做到?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

répondre à tous(1)
巴扎黑

Oui.
Pour plus de détails, vous pouvez lire le livre Ruby Metaprogramming. Il vous dira comment le résumer.

    method_name = "#{params[:type]}_report"
    @orders = Order.done.send(method_name,params[:month],params[:year]) rescue     Order.done.send("daily_report")

Ici, j'ai défini trois périmètres daily_report mensuel_report hebdomadaire_report
Le code ci-dessus génère dynamiquement les noms de trois fonctions et leur transmet ensuite des paramètres.

a.send(method_name,arg1,arg2,...)

De nombreux paramètres peuvent être donnés ici. Le premier paramètre est le nom de la méthode et les paramètres suivants sont tous les paramètres requis par la méthode.
Ensuite, vous pouvez générer des fonctions spécifiques basées sur opt, si les fonctions sont la même chose. Utilisez simplement des paramètres facultatifs pour les paramètres.
Ruby accepte n'importe quel nombre de paramètres. Vous devez ajouter un signe * avant un paramètre, ce paramètre est représenté sous forme de tableau, qui contient 0 ou plusieurs paramètres passés à cette position.

def haha(a *b)
  puts a
end
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal