重新定义任何不以下划线开头的Ruby方法在理论上是否安全?

时间:2011-03-10 22:46:21

标签: ruby monkeypatching

例如,修改Object#object_id在理论上是否安全,因为如果你真的需要知道对象的id是什么,总会有Object#__id__

背景What's another name for object_id?

引发的好奇心

2 个答案:

答案 0 :(得分:3)

在一个理想的系统中,所有内容都记录完整,所有使用代码的人都知道重新定义和修补的内容 - 然后是的,也许。

但众所周知,这种情况很少存在。就个人而言,我认为修补KernelClassModuleObject中已定义的任何内容都是禁忌(除非您在框架级别执行此操作)。 )

最终,我相信最低惊喜原则应该贯穿于所有级别的编码决策。

答案 1 :(得分:2)

  

修改Object#object_id

在理论上是否安全

嗯,我认为我们可能更关注现实而不是理论。事实是,人们不会使用__X__版本,直到他们意识到你已经覆盖并完全抬高了默认行为。随着权力来到责任;仔细使用猴子修补,永远不会引入意外行为。最好只是为类添加一个新方法。