模块#Refine和Module#used - 无法理解它们在Ruby中的使用

时间:2013-03-10 18:30:17

标签: ruby

有谁可以帮助我在这里了解以下两种方法如何与一些例子一起使用?

  
      
  • 模块#筛选
  •   
  • 模块#使用
  •   

1 个答案:

答案 0 :(得分:2)

关于“精炼”,它是名为Refinements的“实验性”特征的一部分。改进不是Ruby 2.0核心规范的一部分,因为它们的价值和后果仍然在各种Ruby实现者之间进行讨论(请记住,Ruby比其核心实现更多,“MRI” - JRuby,Rubinius等)。

优化(如果它们在规范中有一天到达),将允许某种“本地猴子修补”,允许仅在给定模块的范围内修补现有类。如果你对围绕它们的讨论的某些部分感兴趣,你应该看看Charles Olivier Nutter article(他是JRuby的主要实现者)或来自Yehuda Katz的this one

关于“used”,根据来源,它没有做太多的事情:

static VALUE
rb_obj_dummy(void)
{
    return Qnil;
}

经过一些研究和“call to help”,这里是Charles Olivier Nutter(JRuby主要执行者)回答:

  当模块出现在细化的“使用”调用

中时,会调用

#used

所以你的两个问题实际上是联系在一起的。