我正在阅读一本关于ruby编程语言的书,并想知道这样的事情是如何起作用的
class String
def word_count
frequencies = Hash.new(0)
downcase.scan(/\w+/) { |word| frequencies[word] += 1 }
return frequencies
end
end
我知道有一个内置字符串,我来自(C ++)btw,因此在定义一个对象class string
时创建string x = new string()
会产生歧义,我搜索了那个,我发现了一些概念被命名为refinement
,允许我们修改和添加String
类的函数,我看到它们使用关键字refine
来制作这些东西(根据文档),但我的问题来了,当我把上面的类放在irb
上并开始像"amr adel".word_count
那样测试它时,它给了我正确的结果,我预计最初不会工作,所以如果它有效,为什么我可以甚至在我的代码中使用refine
为什么我不创建一个具有相同内置类的类并添加其他函数和修改函数,这是否隐含地进行了细化过程?
我承认ruby太棒了,很容易合作,但我想知道事情还在继续。
如果您可以推荐某些文章或其他内容,我们将非常感激 感谢
答案 0 :(得分:2)
您可以在顶级和内部类中激活优化 模块。您可能无法激活方法范围中的细化。的加细强> 被激活,直到当前类或模块定义结束 或直到当前文件的结尾(如果在顶级使用)。
改进的整点(与仅扩展核心类相反)是作用域。
在上面的代码中,String#word_count
将被定义为无处不在 - 例如,如果您有多个文件。
另一方面,如果您将该方法定义为细化,那么它只会在您明确 using
的位置定义。< / p>
这样做的动机是您可以在一个位置添加/更改行为,而不会影响其他地方的代码。