method_missing是ruby里面一个非常cool的hook。rails里面很多特性都是基于method missing实现的。
但是method missing也不是那么完美。各种rails性能优化的文章都建议避免使用method missing,原因很简单,method missing的实现机制确实会是增加call ruby stack次数。
使用method missing + define method,调用一次method missing后动态定义方法来减少call ruby stack次数。
class A
def method_missing(method_id, *args)
puts "method missing stack called.."
if method_id.to_s =~ /^find_by_(.*?)$/
name = $1
self.class.send(:define_method, method_id) do
name
end
send(method_id, *args)
else
super
end
end
end
obj = A.new
p obj.find_by_title
p obj.find_by_title
输出:
method missing stack called..
"title"
"title" #第二次没有执行method missing方法..
rails里的find by和动态属性都是这样实现的:
https://github.com/rails/rails/blob/master/activerecord/lib/active_record/base.rb
https://github.com/rails/rails/blob/master/activerecord/lib/active_record/attribute_methods.rb
分享到:
相关推荐
Android下各语言加callStack打印信息的示例 包括C语言, C++,Java和Kernel Space。
一个简单的打印程序调用栈的例子 .... <br>http://topic.csdn.net/u/20080804/15/623a4355-cfeb-4241-8fba-022fff8facf4.html
android开发,打印调用栈
android java CPP的callstack函数回调打印,将文档的代码植入系统就可以。分别介绍了基于java 和 CPP的linux底层call back
memleak_callstack_ok for android project
android开发,打印调用栈 ,callstack.cpp,android开发,打印调用栈,android开发,打印调用栈
前端开源库-eslint-config-callstack-ioeslint配置callstack io,eslint预设扩展airbnb,流,prettier和jest
在android上logd logv 时,看不到函数堆栈。 把这个函数加进去。ok。。 好用就顶 usage: ... #include "CallStack.h" ... mycallstack::CallStack calStk; calStk.update(2); calStk.dump(); ...
Pro MERN Stack Full Stack Web App Development with Mongo Express React and Node.pdf Pro MERN Stack Full Stack Web App Development with Mongo Express React and Node.pdf Pro MERN Stack Full Stack Web ...
小程序开发 crypto-js 报错 加密 解密 maximum call stack size exceeded
用Android Studio实现一个简单的登录界面 1.启动Android Studio并创建一个名为sytwologinpage的新项目。 2.打开res\layout目录下的activity_main.xml布局文件。 ... 3.打开src/ayoutexample包下的MainActivity.java文件...
一本讲函数调用栈的文章,很不错 文章是英文版的,不错都很好懂,值得一看
Develop rich and scalable applications with the new MEAN Stack Key Features Learn how to construct modern web applications with Node.js, Express.js, MondoDB, and Aurelia. Harness the power of the ...
主要介绍了Java反射之Call stack introspection详解,具有一定参考价值,需要的朋友可以了解下。
Hands-On Full-Stack Development with Swift 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
@ callstack / eslint-config 用于React Native,React和Node.js项目的Callstack ESLint配置,使用Flow,TypeScript,Prettier和Jest以及合理的默认值。安装使用纱线:yarn add --dev eslint @callstack/eslint-...
Mage :: helper ( 'stack/callstack' )-> toFirePhp (); Mage :: helper ( 'stack/callstack' )-> toLog (); 示例输出 .../app/code/community/Timbroder/Stack/Helper/Callstack....
提供易于使用的CallStack抽象,可用于代码反射。 笔记 使用 kuebk/node-stack 作为可选依赖项:这个 dep 可以访问 v8::StackTrace。 如果该依赖项不存在,请使用 Error 进行自省。 每个堆栈帧都应该有一些信息: ...
Hands-On Full-Stack Development with Swift_Code 源码 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
本源码实现了两个类,一个是带有最大值的栈和一个是带有最大值的队列。栈利用了两个C++的stack,队列利用了C++的queue。