美文网首页
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元编程笔记 - 方法

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