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

例如,我有如下代码:

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

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

天蓬老师
天蓬老师

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

membalas semua(1)
巴扎黑

Ya.
Untuk butiran, anda boleh membaca buku Ruby Metaprogramming. Ia akan memberitahu anda cara mengabstrakkannya.

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

Di sini saya telah mentakrifkan tiga skop laporan_harian_laporan_bulanan_laporan_mingguan
Kod di atas secara dinamik menjana nama tiga fungsi dan kemudian menghantar parameter kepada mereka.

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

Banyak parameter boleh diberikan di sini. Parameter pertama ialah nama kaedah, dan parameter berikut adalah semua parameter yang diperlukan oleh kaedah.
Kemudian anda boleh menjana fungsi tertentu berdasarkan opt, jika fungsi adalah perkara yang sama. Hanya gunakan parameter pilihan untuk parameter.
Ruby menerima sebarang bilangan parameter Anda mesti menambah tanda * sebelum parameter Dalam kod kaedah, parameter ini diwakili sebagai tatasusunan, yang mengandungi 0 atau lebih parameter yang dihantar ke kedudukan ini.

def haha(a *b)
  puts a
end
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan