当前位置:  开发笔记 > 编程语言 > 正文

猴子修补核心类的替代方案

如何解决《猴子修补核心类的替代方案》经验,为你挑选了2个好方法。

我还是Ruby的新手,基本上只是在完成Cooper的书之后编写我的第一个微程序.我被指向避免猴子修补的方向,但问题是我不知道有什么替代方法可以实现相同的行为.基本上,我想添加一个每个字符串对象都可以访问的新方法.明显的猴子修补方式是:

class String
  def do_magic
    ...magic...
  end
end

我记得有一种使用String.send的方法.但我不记得它是如何完成的,也不记得我在哪里阅读它.任何人都可以指出任何仍然可以使该方法可用于String类和子对象的替代方法吗?



1> Chuck..:

执行此操作的任何其他方式只是猴子修补的更尴尬的语法.有各种方式涉及sendeval各种各样的事情,但为什么呢?继续以明显的方式做到这一点.

你想要在大型项目中或者当你有依赖关系时要小心猴子修补,因为当几只手在同一个地方乱搞时你可以结束冲突.这并不意味着寻找可以完成同样事情的替代语法 - 这意味着当您进行可能影响不属于您的代码的更改时要小心.在您的特定情况下,这可能不是一个问题.这只是大型项目中可能需要解决的问题.

Ruby中的一个替代方案是您可以向单个对象添加方法.

a = "Hello"
b = "Goodbye"
class < "yo"
b.to_slang # NoMethodError: undefined method `to_slang' for "Goodbye":String



2> Aaron Hinni..:

如果你想添加一个每个字符串对象都可以访问的新方法,那么按照你拥有它的方式去做就是如何完成它.

一个好的做法是将核心对象的扩展放在单独的文件(如string_ex.rb)或子目录(如extensionscore_ext)中.这样,很明显扩展了什么,并且很容易让人看到它们是如何被扩展或改变的.

猴子修补可能会变坏的地方是当您更改核心对象的某些现有行为时,会导致某些其他代码期望原始功能行为不当.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有