Ruby元编程技术详解(Ruby Metaprogramming techniques)
我最近考虑了很多元编程的问题,并希望看到更多这方面技术的例子和讲解。无论好坏,元编程已经进入Ruby社区,并成为完成各种任务和简化代码的标准方式。以定义一个ActiveRecord模型对象为例: 在这个例子中,令人感兴趣的是set_table_name的使用。通过使用单例类我们达到了这个目的。 Ruby允许你动态创建和修改class和module。特定情况下会很有用。标准的面向对象方法是继承并重载,再调用父类方法。 module_eval会在调用的module的上下文中执行字符串或block。 module_eval几乎总是适用;要像对待瘟疫一样避免使用eval。这会严重破坏封装,然而有时候确实非常顺手。这时候要用kernel方法binding来获得所绑定的对象。我并不声称自己是Ruby或者元编程方面的专家,这只是我对这个问题的一些想法。
用户评论