rails动态定义实例方法和类方法

在写代码的时候经常会出现一些这样的情况:

obj.method(type,arg1,arg2..argn)

为了更好理解,我们也经常写成这个样子:

obj.method_type1(arg1,arg2..argn)
obj.method_type2(arg1,arg2..argn)
obj.method_typen(arg1,arg2..argn)

在ruby元变成中介绍过很多关于精简这些代码的方法,其中有一个define_method,我觉得是解决这种问题不错的方案,方法如下:

[type1,type2....typen].each do |type|
  define_method "method_#{type}".to_sym do |arg1,arg2...argn|
    obj.method(type,type1,type2...typen)
  end
end

那么如果需要优化的是类方法呢?比如:

method(type,arg1,arg2..argn)

这种其实原理也一样,主要是需要铭记一点,就是在ruby中,一切皆对象,当前的类本身也是一个对象。那么上面的其实可以这样写:

(class << self; self; end).instance_eval do
  [type1,type2....typen].each do |type|
    define_method "method_#{type}".to_sym do |arg1,arg2...argn|
      method(type,type1,type2...typen)
    end 
  end
end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李少辉-开发者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值