method_missing了解10件事

我可不是标题党,题目是原作者起的
[url=http://www.thirdbit.net/articles/2007/08/01/10-things-you-should-know-about-method_missing/]10 things you should know about method_missing[/url]

1,method_missing是一个Ruby内核方法

2,Rails使用method_missing实现了一些最惊人的magic。当你请求Model的find_by_freaky_column_name方法时,Model会给予
响应,因为ActiveRecord::Base覆盖了内核的method_missing方法。

3,method_missing是方法调用的最后一道防线。当你发送消息到Ruby对象时,Ruby查询与消息同名的方法来调用(有许多方式来
发送消息,最常见的方式是obj.method_name,而你也可以使用obj.send(:method_name)来显示的调用方法)。首先它查询当前
self对象自己的实例方法,然后是该类引入的每个模块,并且是按引入模块的反序。然后它查询该类的父类以及父类引入的模块,
如此这般直到Object类。如果这样仍然找不到该方法,则最后去找的地方就是Object类里引入的Kernel模块,最后将调用的方法
就是method_mising。你可以在方法查询路径里的任何位置覆盖method_missing来告诉Ruby当找不到方法时干什么。

4,我们使用method_missing来实现一些默认行为,更多的是使用它来作为方法工厂或分配器。有时候我们想使用一个类或模块来
做一些同样的工作,我们不知道用户会调用哪个方法,而实现所有的方法看起来又太浪费了。有时候我们添加一个新方法到类中
(factory);有时候我们使用method_missing(dispatcher)。

5,method_missing是Ruby的一个特性,它让我们非常容易[url=http://weblog.jamisbuck.org/2006/4/20/writing-domain-specific-languages]创建自己的DSL[/url]。DSL为[url=http://www.martinfowler.com/bliki/DomainSpecificLanguage.html]Domain Specific Language[/url]。

6,这里是[url=http://www.ruby-doc.org/core/classes/Kernel.src/M005929.html]内核的method_missing实现[/url]。它是用C写的,可以看到结果是NoMethodError。
[code]
irb(main): "thingy".invoke_method_missing_for_demo_purposes("arg", "other arg")
NoMethodError: undefined method 'invoke_method_missing_for_demo_purposes' for "thingy":String from (irb):227
[/code]

7,[url=http://weblog.jamisbuck.org/2006/12/1/under-the-hood-activerecord-base-find-part-3]这里[/url]Jamic Buck为我们展示了ActiveRecord::Base怎样覆盖method_missing。

8,method_missing据说比直接调用已经存在的方法慢,确实是这样,因为它是在Ruby查询所有地方后才调用。不过这并不影响使用。

9,method_missing可能对使用你的代码的用户有点不透明,因为动态创建的方法不会有API文档。

10,使用method_missing是Ruby元编程的一个大特性,元编程对其他语言(如Java)开发者而言不是常见的。在method_missing的讨论
中说道:“我不认为元编程在这里是为了节省内存或提高速度。元编程后面的哲学是告诉Ruby你的惯例并让它作一些猜测,以达到节省你的代码的目的。”
电流镜设计实战:从基础到高级技巧(附常见问题解决方案) 本文从工程实战角度,系统讲解了电流镜设计从基础原理到高级技巧的全过程。深入剖析了匹配精度、输出阻抗等核心矛盾,并详细介绍了共源共栅(Cascode)结构如何平衡电压裕度与输出阻抗。文章还重点探讨了工艺偏差、版图应力效应等实战中的“隐形杀手”,并提供了常见问题的解决方案与调试技巧,旨在帮助工程师设计出鲁棒性更强的模拟电路。 阅读详情

相关推荐

Molflow新手必看:Facet基础操作全解析(从2D建模到3D拉伸)

本文为Molflow新手提供了Facet基础操作的全面解析,涵盖从2D图形创建到3D模型拉伸的完整流程。详细介绍了Facet作为几何建模基石的核心概念、顶点编辑、布尔运算以及拉伸、放样等关键操作,并深入讲解了如何为其配置物理参数以实现真空系统的蒙特卡洛模拟。

prometheus9mon的博客 417

错误代码 missing-method 错误原因: 缺少方法名参数_Makefile中常见的错误信息

make 执行过程中所产生错误并不都是致命的,特别是在命令行之前存在 "-"、或者 make 使用 "-k" 选项执行时。make 执行过程的致命错误都带有前缀字符串 "***"。错误信息都有前缀,一种是执行程序名作为错误前缀(通常是 "make");另外一种是当 Makefile 本身存在语法错误无法被 make 解析并执行时,前缀包含了 Makefile 文件名和出现错误的行号。在下...

weixin_29007809的博客 3406

大白话系列:什么是微服务

用大白话和实际例子来通俗易懂地告诉你什么是微服务~

2401_87403086的博客 1242

Groovy - 探索之 MOP(invokeMethod 和 methodMissing 方法)

Groovy - 探索之 MOP(invokeMethod 和 methodMissing 方法)

1550

LPDDR5X内存技术解析:性能提升与优化策略

内存技术在现代计算系统中扮演着核心角色,其性能直接影响整体系统效率。LPDDR5X作为JEDEC最新标准,通过提升数据传输率至8533Mbps、优化能效比15%以上,并扩展突发长度至32字节,显著提升了移动设备的处理能力。这些改进特别适用于5G通信、AI加速(如昇腾芯片)及8K视频处理等高带宽需求场景。技术原理上,LPDDR5X引入了动态电压频率调整(DVFS)和可编程突发长度等创新机制,有效降低了实际应用中的延迟。在工程实践中,合理的PCB布局和信号完整性验证是确保高速稳定运行的关键。随着AI和8K应用的

weixin_29190169的博客 396

企业微信群机器人Webhook配置全攻略:从创建到发送消息的完整流程

本文详细介绍了企业微信群机器人Webhook的配置流程,从创建机器人到获取Webhook地址,再到发送各类消息的完整步骤。通过Python代码示例展示了文本、Markdown等消息类型的发送方法,并提供了性能优化建议和常见问题排查技巧,帮助企业高效实现自动化消息推送。

weixin_29208327的博客 6818

无法捕获的异常:MissingMethodException

今天一个同事发布站点,一直出现一些稀奇古怪的问题,各种各样的异常都有,根据这些异常去排查代码,都完全正常,很让人郁闷,因为代码里可能出异常的地方都记录了程序日志,所以他一直没去排查系统里的“应用程序日志”,只是在查程序, 后面找到我,我第一时间去看系统日志里的“应用程序日志”,果然有一堆的异常: 异常信息:    异常类型: MissingMethodException    异常消息:

北亮的专栏 5829

手把手教你用Multisim搭建FM直接调频电路(附完整波形分析)

本文通过Multisim仿真软件,手把手教你搭建FM直接调频电路。详细介绍了从核心概念理解、压控振荡器(VCO)参数设置、电路搭建与波形观测,到带通滤波器设计与信号优化的完整流程。通过对比滤波前后的时域波形与频谱分析,帮助读者直观理解频率调制原理,并提供了常见问题的排查思路与参数调试方法,将抽象的通信理论转化为可操作的实践技能。

weixin_29230773的博客 214

IronRuby:元编程特性【method_missing】的使用

在OpenExpressApp中写的自动化测试用例片段如下,之所以能这么易读,是因为可以使用Ruby的method_missing来进行方法调用: view sourceprint? 01 打开模块 "部门管理" ...

weixin_33937778的博客 160

R语言生存分析之限制性立方样条分析:样条回归、和多项式回归有什么不同?是否存在非线性关系、限制性立方样条cox回归模型

R语言生存分析之限制性立方样条分析:样条回归、和多项式回归有什么不同?是否存在非线性关系、限制性立方样条cox回归模型

statistics+insight+vista+power 634

基于matlab目标雷达横截面建模(附源码)

雷达系统依靠目标反射或散射来检测和识别目标。目标反射越强,雷达接收器返回的回波就越大,从而获得更高的信噪比(SNR)和更高的检测可能性。在雷达系统中,从目标反射的能量由雷达横截面(RCS)决定,定义为sigma代表RCS,R是雷达与目标之间的距离,Es是从目标反射的信号的场强,以及Ei是入射到目标上的信号的场强。通常,目标向各个方向散射能量,RCS是入射角,散射角和信号频率的函数。RCS 取决于目标的形状和构建目标的材料。用于RCS的常用单位包括平方米或dBsm。

珞瑜的博客 3083

关于method_missing

10 things you should know about method_missing 1,method_missing是一个Ruby内核方法 2,Rails使用method_missing实现了一些最惊人的magic。当你请求Model的find_by_freaky_column_name方法时,Model会给予 响应,因为ActiveRecord::Base覆盖了内...

雷雨路上 271

cesium 淹没分析

cesium淹没分析

God's asylum的博客 480

ruby-method_missing

在任何时候,对象接收到它不能响应消息的时候,说明 这个消息不能在对象的查找路径中匹配任何方法,这个方法就被执行。 class Teacher PEOPLE=[] attr_reader :name, :hobbyies def initialize(name) @name=name @hobbies=[]...

fd2015的博客 452

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

javascript 元编程之 method_missing

javascript 元编程之 method_missing 引言 要说元编程 ruby 中技巧太多了,今天来写的这个技术也来自于 ruby 中的灵感。 method_missing 这个在 ruby 中对象调用方法如果没有调到就会去调用这个方法。 这个功能在 javascript 中怎么实现,现在 proxy 出现了,这个就有思路了。 实现 class Base { constru...

weixin_30872499的博客 160

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Ruby China中method_missing和define_method剖析

Ruby China中method_missing和define_method剖析 很多人都与 method_missing 干柴烈火,但在并没有小心处理彼此之间的关系。所以,我想来探讨一下这个问题: ** 我该怎么用 method_missing ** 什么时候该抵挡 method_missing 的诱惑 首先,永远不要在还没花时间考虑你用得够不够好之

灰太狼蝈蝈的博客 1183

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ruby元编程之 method_missing 一个细节

我们知道顶级域,定义域的self是啥? puts self #main puts self.class #Object 我们知道当一个方法被调用的时候,如果没有对象接受,默认就是self,如: def tell_me_who puts self end tell_me_who #main 方法调用是这样的步骤,先查找当前对象的所在...

182

告别重复定义:FactoryBot动态语法背后的method_missing黑魔法

你是否好奇为什么在FactoryBot中可以直接写`name { 'Alice' }`而不是繁琐的`add_attribute(:name) { 'Alice' }`?或者为什么简单调用`user`就能自动创建关联对象?这一切都归功于Ruby的`method_missing`机制与FactoryBot的巧妙结合。本文将深入解析[lib/factory_bot/definition_proxy.rb...

gitblog_00832的博客 444

heroku_san底层拆解:git update-ref推送技巧与method_missing魔法,Heroku一键部署完整指南

heroku_san 是一个面向 Heroku 应用部署与运维的轻量级 Ruby 工具库,它把推送代码、数据库迁移、重启服务这些繁琐步骤封装成简洁的 Rake 任务,让你一条命令完成部署。今天这篇文章带你深入它的源码底层,拆解两个最精彩的设计:用 `git update-ref` 实现"任意提交安全推送"的技巧,以及 API 层利用 `method_missing` 实现的"万能遥控器"魔法 🎩

gitblog_00403的博客 396

reduce method missing call stack with dynamic define method

method_missing是ruby里面一个非常cool的hook。rails里面很多特性都是基于method missing实现的。 但是method missing也不是那么完美。各种rails性能优化的文章都建议避免使用method missing,原因很简单,method missing的实现机制确实会是增加call ruby stack次数。 使用method missing ...

hooopo的专栏 162

关于method_missing 和respond_to?的基本用法

method_missing is a well-known tool in the Ruby metaprogramming toolbox. It’s callback method you can implement that gets called when a object tries to call a method that’s, well, missing. A well know...

horace_lee的专栏 539

[Ruby笔记]21.Ruby public_method_defined? 以及 method_missing

public_method_defined? 在A类中定义了一个hello方法,使用public_method_defined?就可以判断是不是存在 : PS C:\Users\Administrator\Rubycode> irb --simple-prompt >> class A >> def hello >> puts "hello hi" >> end >> end>> A.pub

需要加盐吗? 881

method_missing,一个 Ruby 程序员的梦中情人

地址:http://www.alfajango.com/blog/method_missing-a-rubyists-beautiful-mistress/ 标题:method_missing:  A Rubyist’s Beautiful Mistress 译者:逸才 我最近读了些文章(比如这篇),宣传在 Ruby 里使用 method_missing 的。 很多人都与 met

坠泪惜缘 1274

Roc 编译器快照测试深度解析:调用浮点字面量 `0.0()` 为何报 Missing Method 而非崩溃

本篇文章以 Roc 编译器仓库中的快照测试 [test/snapshots/call_float_literal.md](https://link.gitcode.com/i/a9bab89c7ad1a3d0b9da570550ffdabf) 为核心骨架,逐段拆解这份 `type=expr` 快照所固化的编译行为:当开发者写出 `0.0()`——把浮点字面量当作函数来调用——时,Roc 的词法、语

gitblog_00393的博客 501
上一篇: Flex快速上手
下一篇: 介绍Cairngorm
hidetobj
博客等级 码龄19年 16粉丝 301原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值