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系统中,理解和分析调用堆栈(call stack)对于开发者来说至关重要,尤其是在调试和性能优化时。本文将深入探讨如何在Android环境下为不同语言(C语言、C++、Java以及内核空间)添加并打印调用堆栈信息。 ...
android开发,打印调用栈 ,callstack.cpp,android开发,打印调用栈,android开发,打印调用栈
一个简单的打印程序调用栈的例子 .... <br>http://topic.csdn.net/u/20080804/15/623a4355-cfeb-4241-8fba-022fff8facf4.html
android开发,打印调用栈
**前端开源库-eslint-config-callstack-io** 在前端开发领域,保持代码质量和一致性是至关重要的。`eslint-config-callstack-io` 是一个开源库,专门用于帮助开发者实现这一目标。它提供了预设的 ESLint 配置,结合...
android java CPP的callstack函数回调打印,将文档的代码植入系统就可以。分别介绍了基于java 和 CPP的linux底层call back
在android上logd logv 时,看不到函数堆栈。 把这个函数加进去。ok。。 好用就顶 usage: ... #include "CallStack.h" ... mycallstack::CallStack calStk; calStk.update(2); calStk.dump(); ...
标题“memleak_callstack_ok”暗示我们正在讨论一个针对Android项目解决内存泄漏问题的方案。内存泄漏在软件开发中是一个严重的问题,尤其是在资源有限的移动设备上,如Android手机和平板。它会导致应用程序占用...
小程序开发 crypto-js 报错 加密 解密 maximum call stack size exceeded
Java反射之Call Stack Introspection是Java编程中的一个重要特性,它允许程序在运行时检查自身的方法调用堆栈。在Java中,每个线程都有自己的调用栈,用于存储方法调用的信息。栈帧(StackTraceElement)是这个调用...
用Android Studio实现一个简单的登录界面 1.启动Android Studio并创建一个名为sytwologinpage的新项目。 2.打开res\layout目录下的activity_main.xml布局文件。 ... 3.打开src/ayoutexample包下的MainActivity.java文件...
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 进行自省。 每个堆栈帧都应该有一些信息: ...
This document describes how to analyze and retrieve the call stack for an executing program written in C or C++. The process can be quite complicated because of the unique features of certain ...
本源码实现了两个类,一个是带有最大值的栈和一个是带有最大值的队列。栈利用了两个C++的stack,队列利用了C++的queue。
Using Vapor, we will build a full-stack web application that will act as an API server for our iOS and tvOS app, and will also be our web server, which will render a web view of our app. Several ...