gpt4 book ai didi

ruby - 猴子修补基本 ruby 类是一种不好的做法吗?

转载 作者:数据小太阳 更新时间:2023-10-29 07:30:28 26 4
gpt4 key购买 nike

我正在开发一个 ruby​​ 项目,我们计划在其中对 ruby​​ 字符串进行一些操作。有些操作很简单(比如计算单词的数量),有些则比较复杂(比如检查给定字符串的语言是否正确)。

一种可能的实现方式是用额外的方法修补 String 类,不修改任何现有方法,并添加像 "some string"这样的行为.word_count"some string".cjk?

另一种基于 FileUtils 的方法是创建一个充满方法的类或模块,并始终使用字符串作为参数,例如 OddClassName.word_count("some string")OddClassName.cjk?("some string")。由于可读性,我们更喜欢第一个。

我知道第一个替代方案中描述的猴子修补基本类可能会发生名称冲突。但是,如果这是主要应用程序,而不是库,我还需要担心吗?

所以,问题是:

  • 向 ruby​​ 基类添加方法是一种不好的做法吗?如果是,是在所有情况下还是仅在某些情况下?
  • 实现此目标的最佳方法是什么?
  • “OddClassName”的名称可能是什么?

请提出任何替代方案。

最佳答案

猴子修补不被认为是一种不好的做法,除非你正在编写没有 PatchedClass 相关行为的奇怪方法(例如,String.monkeyPatchForMakingJpegFromString 是相当糟糕的,但是 Jpeg.fromString 就足够了。)

但是如果你的项目相当大,你在其中使用的库可能碰巧有冲突的补丁,所以你可能会遇到所有这些补丁问题。在 Ruby 2.0 中,改进 起到了帮助作用。它们的工作方式如下:您定义一个 modulerefine 您在其中的(甚至核心)类,然后在需要的地方使用该模块。因此,在您的代码中,它的作用是:

YourClass.new.refinedMethodFromCoreClass #=> some result

但是

CoreClass.refinedMethodFromCoreClass

产生未定义的方法异常。

这就是猴子补丁的全部内容:猴子补丁既有用又方便,但改进会增加一些功能,使您的代码更安全、更可维护且更整洁。

关于ruby - 猴子修补基本 ruby 类是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16306609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com