0

我正在阅读一些关于 ruby​​ 编程语言的书,并且想知道这样的东西是如何工作的

class String
  def word_count
    frequencies = Hash.new(0)
    downcase.scan(/\w+/) { |word| frequencies[word] += 1 }
    return frequencies
  end
end

我知道有一个内置字符串,我来自(C++)顺便说一句,所以class string在定义一个对象时创建会产生歧义string x = new string(),我搜索了一下,我发现一些概念被命名refinement,它允许我们修改和添加函数到String类,我看到他们使用关键字refine来制作这些东西(根据文档),但是我的问题来了,当我把上面的类放在上面irb并开始像这样测试它时"amr adel".word_count,它给了我正确的结果,我预计不会一开始工作,所以如果它有效,为什么我什至可以refine在我的代码中使用为什么我不只创建一个与内置类同名的类并放置附加函数和修改函数,这种方式是否在进行细化过程隐含的?

我承认 ruby​​ 很棒而且很容易使用,但我想知道事情还在继续。

如果您可以参考一些文章或其他内容,将不胜感激谢谢

4

1 回答 1

2

红宝石文档

您可以在顶层以及类和模块内部激活细化。您不能在方法范围内激活细化。优化 一直激活到当前类或模块定义结束, 或者直到当前文件结束(如果在顶层使用)。

改进的全部意义(而不是仅仅扩展一个核心类)是它们是作用域的。

在您上面的代码中,String#word_count将在任何地方定义- 例如,如果您有多个文件。

另一方面,如果您将该方法定义为一种改进,那么它将仅在您明确定义它的地方定义using

这样做的动机是您可以在一个位置添加/更改行为,而不会影响其他地方的代码。

于 2018-01-09T14:23:04.920 回答