Ruby元编程笔记 - 方法

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()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容