我还是
Ruby的新手,基本上只是在完成库珀的书之后写下我的第一个微程序.我指出了避免猴子补丁的方向,但问题是我不知道实现相同行为的替代方案.
基本上,我想添加一个可以被每个字符串对象访问的新方法.明显的猴子修补方式是:
基本上,我想添加一个可以被每个字符串对象访问的新方法.明显的猴子修补方式是:
class String def do_magic ...magic... end end
我记得有一种方法使用String.send.但我不记得它是如何完成的,哪里我读.
有人可以指出任何仍然允许我使该方法可用于String类和子对象的替代方法?
解决方法
这样做的其他任何方法只是猴子修补的一个更尴尬的语法.有什么方法涉及发送和eval和各种各样的事情,但为什么?继续做明确的方法.
你想要注意大型项目中的猴子补丁,或者当你有依赖关系的时候,因为当几只手都在同一个地方乱七八糟的时候,你可以摆脱冲突.这并不意味着寻找一种完成同样事物的替代语法 – 这意味着在进行可能影响不是您的代码的更改时要小心.这在你的具体情况下可能不是一个问题.这只是在大型项目中可能需要解决的问题.
a = "Hello" b = "Goodbye" class <<a def to_slang "yo" end end a.to_slang # => "yo" b.to_slang # NoMethodError: undefined method `to_slang' for "Goodbye":String