ruby中的send,xxx_eval方法

send的使用:
class Klass
     def hello(*args)
       "Hello " + args.join(' ')
     end
end
k = Klass.new
k.send :hello, "gentle", "readers"   #=> "Hello gentle readers"

send其实就是动态地根据名字调用函数,传递后面的内容作为调用参数,api函数原型为:
obj.send(symbol [, args...]) => obj

作为脚本语言,ruby自然也有eval这样的函数,除此之外,还有instance_eval和class_eval
instance_eval感觉就是取出对象的里的变量
class Klass
     def initialize
       @secret = 99
     end
end
k = Klass.new
k.instance_eval { @secret }   #=> 99
 
class_eval(alias module_eval)就比较重要了,实现类的动态性方面作用很大,rails的框架里就大量使用了class_eval来动态丰富类的成员
class Thing
end
a = %q{def hello() "Hello there!" end}
Thing.module_eval(a)
puts Thing.new.hello()   =>  "Hello there!"
在rails里的action_controller.rb里
ActionController::Base.class_eval do
  include ActionController::Flash
  include ActionController::Filters
。。。。
end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值