加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 猴子修补核心课程的替代方案

发布时间:2020-12-16 22:20:37 所属栏目:百科 来源:网络整理
导读:我还是 Ruby的新手,基本上只是在完成库珀的书之后写下我的第一个微程序.我指出了避免猴子补丁的方向,但问题是我不知道实现相同行为的替代方案. 基本上,我想添加一个可以被每个字符串对象访问的新方法.明显的猴子修补方式是: class String def do_magic ...m
我还是 Ruby的新手,基本上只是在完成库珀的书之后写下我的第一个微程序.我指出了避免猴子补丁的方向,但问题是我不知道实现相同行为的替代方案.
基本上,我想添加一个可以被每个字符串对象访问的新方法.明显的猴子修补方式是:
class String
  def do_magic
    ...magic...
  end
end

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

解决方法

这样做的其他任何方法只是猴子修补的一个更尴尬的语法.有什么方法涉及发送和eval和各种各样的事情,但为什么?继续做明确的方法.

你想要注意大型项目中的猴子补丁,或者当你有依赖关系的时候,因为当几只手都在同一个地方乱七八糟的时候,你可以摆脱冲突.这并不意味着寻找一种完成同样事物的替代语法 – 这意味着在进行可能影响不是您的代码的更改时要小心.这在你的具体情况下可能不是一个问题.这只是在大型项目中可能需要解决的问题.

Ruby中的一个替代方法是可以将方法添加到单个对象.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读