当ruby试着去调用一个不存在的方法时( 或者,一个对象发送了一个不能被处理的消息 ),就可能会引起错误并造成程序的终止。你可能更喜欢你编写的程序能够从这样的错误中恢复过来。可以使用method_missing方法,该方法接受一 个方法名,如果该方法不存在,method_missing方法就会被调用:

Ruby代码
  1. def method_missing( methodname )
  2. puts( "#{methodname} does not exist" )
  3. end
  4. xxx #=>xxx does not exist
def method_missing( methodname )    puts( "#{methodname} does not exist" ) end  xxx #=>xxx does not exist

method_missing也可以处理还有参数的根本就不存在的方法:

Ruby代码
  1. def method_missing( methodname, *args )
  2. puts( "Class #{self.class} does not understand:
  3. #{methodname}( #{args.inspect} )" )
  4. end
def method_missing( methodname, *args )        puts( "Class #{self.class} does not understand:                              #{methodname}( #{args.inspect} )" )  end 

method_missing方法甚至可以动态地创建没有定义的方法:

Ruby代码
  1. def method_missing( methodname, *args )
  2. self.class.send( :define_method, methodname,
  3. lambda{ |*args| puts( args.inspect) } )
  4. end
def method_missing( methodname, *args )         self.class.send( :define_method, methodname,                     lambda{ |*args| puts( args.inspect) } )  end 

转载于:https://www.cnblogs.com/orez88/articles/1523528.html

诗歌rails之 method_missing相关推荐

  1. 诗歌rails之如何写一个简单的Rails Plugin

    生成plugin骨架代码: Ruby代码 ruby script\generate plugin MyPlugin ruby script\generate plugin MyPlugin 功能需求: ...

  2. 诗歌rails之 定时任务 rufus-scheduler

    相关文章: 关于ROR的定时任务 如何在Rails中实现邮件定时发送? crontab调用rake 不能成功,手动执行rake没问题 推荐圈子: TODOtree-ruby 更多相关推荐 在平时的开发 ...

  3. 诗歌rails 之with_options

    Rails里有些方法使用一个Hash作为最后一个可选的参数,如果对多个方法有同样的选项,我们可以使用with_options来减少冗余: ruby代码 # models/user.rb with_op ...

  4. 诗歌rails之 Logger

    关键字: Rails Logger Rails在controller里自带了logger,我们可以用来做debug: ruby代码 def show @cart = current_cart logg ...

  5. 诗歌rails 之自定义Helper模块

    关键字: Rails Helper Rails默认为每个controller指定一个helper,所有的helper都放在app/helpers目录下 但是有些Helper我们希望是全局共享的,一般我 ...

  6. 诗歌rails之Hacking ActiveRecord

    关键字: Hacking 看下面一个场景: ruby代码 # product.rb class Product < ActiveRecord::Base validates_presence_o ...

  7. 诗歌rails 之bundle

    转自:http://blackanger.blog.51cto.com/140924/355320 Rails3里多了个Bundler工具. 它是一个Library管理工具,它提供了好的工具来管理你r ...

  8. 诗歌rails 之gem命令

    gem相关命令使用 1.显示gem的帮助和版本 gem –h/--help #显示gem的帮助 gem –v /--version #显示gem的版本号 2. 列出远程库的所有可用软件 gem que ...

  9. 诗歌rails之 有条件的validation

    默认每次save我们的Model时都会执行validation,但有时候我们希望有一定的条件触发时才执行validation: Java代码 # models/user.rb validates_pr ...

最新文章

  1. Java中合成与继承的选择
  2. css3--文字效果
  3. Sublime Text 3 详细安装教程
  4. CF125E MST company (凸优化+MST)
  5. 搭建Pxe服务器无人听应答全自动网络安装VMWare esxi 6.0系统
  6. sql server存储过程解密
  7. Laravel 跨域问题解决
  8. ZBrush建模的15个小技巧,萌新小白都用得上的干货,速看
  9. 笔记本样机的识别(加测硬盘通电时间软件HDTune)
  10. MSI设计一个1位二进制全减器
  11. 次元壁的重塑:当AI主播走进央视演播厅
  12. 宁宛 机器人_忠犬机器人3
  13. 七上八下猜数字_[转]适宜导游在旅游车载途中讲述的故事及互动游戏合集
  14. 部门年终总结会议有必要开吗?
  15. atikmpag.sys 导致蓝屏
  16. 笔记本电脑计算机的配置表,笔记本组装配置清单_笔记本电脑配置单及价格
  17. 淘宝商品详情接口(原数据app、h5端)
  18. 串口——同时打开两个串口
  19. 信管家源代码c语言,AK老唐信管家软件指标 宝塔线副图源码
  20. 面试官喜欢问的 设计模式之观察者模式

热门文章

  1. 将你的前端应用打包成docker镜像并部署到服务器?仅需一个脚本搞定
  2. 对称加密——对入参进行DES加密处理
  3. JQuery事件绑定,bind与on区别
  4. bzoj2243 [SDOI2011]染色
  5. Android之startActivityForResult的使用
  6. 通过Attached Property给控件绑定Command(二)
  7. 使用自定义UISlider控制View亮度
  8. 谈谈Activity如何启动的
  9. Android启动失败
  10. git上传自己的代码