• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >ruby > ruby元编程之method_missing的一个使用细节

ruby元编程之method_missing的一个使用细节

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了ruby method missing,missing method body,missing method,ruby,ruby rose等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

我们知道顶级域,定义域的self是啥?
puts self    #main
puts self.class #Object
</div>
我们知道当一个方法被调用的时候,如果没有对象接受,默认就是self,如:
def tell_me_who
    puts self
end
tell_me_who  #main
</div>
 方法调用是这样的步骤,先查找当前对象的所在类的实例方法存在方法与否,如果存在,调用方法,如果不存在则查看superclass,直到 BasicObject都没找到对于方法的话,就会调用Kernel的method_missing()方法,并且报错,如
Error:test.rb:8: undefine: undefined local variable or method `ask' for main:Object (NameError)
</div>
 注意报错的信息,我们可以发现,当我们调用一个不存在的变量的时候,也是会追溯到Kernel的method_missing方法的,这里要注意咯。

验证:
puts self    #main
puts self.class #Object
def self.method_missing(name,*arg)
    puts "#{name} is not exist!"
end
puts ask   #ask is not exist!
</div>
 一个案例导致BUG:
def self.method_missing(name,*arg)
    1.times do
        puts method_name=name
    end
    puts "#{method_name} is not exist!"
end
</div>
ask #变量或者方法

意图:让任何未定义的变量或者方法,都打印一次
可是,这是一个死循环?看出问题了吗
ask被执行,可是没有定义ask,就会转到method_missing,
method_name在times的block中,出了作用域了,所以又会执行method_missing,变成了死循环。

</div>

您可能想查找下面的文章:

  • Ruby简明教程之方法(Method)介绍
  • ruby元编程之method_missing的一个使用细节
  • Ruby元编程之梦中情人method_missing方法详解

相关文章

  • Ruby self在不同环境的含义
  • 详细解析Ruby中的变量
  • Ruby on Rails中Rack中间件的基础学习教程
  • Ruby的安装与运行
  • 在Ruby中处理XML和XSLT以及XPath的简单教程
  • rails创建应用程序实例
  • 艰难完成 nginx + puma 部署 rails 4的详细记录
  • Rails Routes中new、collection、member的区别浅析
  • 浅析Ruby中的DATA对象
  • ruby元编程之创建自己的动态方法

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • ruby实现网页图片抓取
    • Ruby实现的合并排序算法
    • 使用Ruby on Rails快速开发web应用的教程实例
    • Ruby中使用多线程队列(Queue)实现下载博客文章保存到本地文件
    • 在Ruby on Rails上使用Redis Store的方法
    • Ruby基础知识之方法、代码段
    • 对优化Ruby on Rails性能的一些办法的探究
    • 分析 rudy 类
    • Ruby中区分运行来源的方法
    • Linux系统上配置Nginx+Ruby on Rails+MySQL超攻略

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有