我正在阅读ActiveSupport core_ext源代码,发现它直接打开并扩展了核心ruby类,例如:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/string/conversions.rb。这不是让我们更难知道某个方法是来自activesupport还是实际上由ruby自己提供的吗(例如通过Method#owner
(?
为什么它不使用诸如预处理/包含模块之类的东西来提供其附加功能?例如:
module StringConversionExtension
def to_time
# some implementation
end
end
String.prepend(StringExtension)
是否有任何历史/性能原因导致实现现在这样?
为什么它不使用诸如预处理/包含模块之类的东西来提供其附加的功能?例如:
可能是其中之一:
- 最小化Rails中的代码量(因为您提出的方法有点冗长(,或者
- 尽量减少现有的方法/常量/模块以及核心类中的方法/常数/模块的数量,因为在您提出的方法中,核心String类将具有新方法,并且现在将包括StringExtensions模块