美文网首页
Ruby元编程笔记 - 方法

Ruby元编程笔记 - 方法

作者: Kumiko | 来源:发表于2015-07-15 15:00 被阅读92次

Dynamic Method

通过send()去动态调用方法:

obj.send(:method, values)
obj.send('method', values)

在Ruby2.2.2中,send()依然可以调用私有方法。为了避免这个问题我们可以用public_send()来做限制。

通过define_method来动态定义方法,如:

define_method(name) do |args|
  ...
end

注意可以通过内省(introspection)来取消更多的重复代码。

method_missing()

覆写method_missing()的时候要注意以下几点:

  1. 必须对请求做判断,当请求不符合条件的时候直接调用super;
  2. 覆写respond_to?,保持逻辑一致性;
  3. 注意不要让方法重名,如果难以避免的话,那么可以新建一个“白板类(BlankSlate)”,使用undef_method()移除不需要的类。:__send__, :__id__, :instance_eval是必须要留下的。

额外知识点:delegate、const_missing()、remove_method()

相关文章

  • Ruby元编程笔记 - 方法

    Dynamic Method 通过send()去动态调用方法: 在Ruby2.2.2中,send()依然可以调用私...

  • Ruby元编程笔记 - 类中的魔法

    Ruby元编程笔记 - 类定义 类定义揭秘 在类定义中,self就是正在定义的类。 所有使用def定义的方法都成了...

  • Ruby元编程笔记——2.方法

    动态方法 动态调用方法Object#send动态定义方法Module#define_method method_m...

  • Ruby元编程(蛋人)

    01 Ruby元编程介绍和使用场景02 Ruby的类结构03 Singleton Method单例方法以及supe...

  • Ruby元编程笔记 - Block

    Block不是对象,应通将其转为proc进行传递。 作用域门 Scope Gate 作用域门一共有三个:modul...

  • 《Ruby 元编程》读书笔记三:方法

    动态方法 目的:消除重复的代码。 ①动态调用方法 调用方法时,通常使用(·),也可以使用Object#se...

  • Ruby元编程

    类 方法 代码块 类宏 Eval方法 实例变量、方法、类 实例变量(Instance Variables)是当你使...

  • ruby元编程

    对象模型 所有class定义之外的代码默认运行在顶级对象main中。 打开类 ruby的class更像是一个作用于...

  • Ruby元编程笔记 - 对象模型

    Tips 类名不过是常量 对象包含了实例变量,它就好像一个Hash表一样。 方法存放在类之中。 类自身也是对象 所...

  • ruby元编程(1)

    面试中碰到一些面试官提到的关于ruby元编程的问题的总结 class和module的区别 官方说明class do...

网友评论

      本文标题:Ruby元编程笔记 - 方法

      本文链接:https://www.haomeiwen.com/subject/oqauqttx.html