gpt4 book ai didi

ruby - 我可以删除 Ruby 中的方法别名吗?

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

假设我有一段 Ruby 代码,我想在其中为一个方法设置别名(我不知道为什么;让我们假设我有一个很好的理由)。

class String
alias_method :contains?, :include?
end

我可以在本节之后删除这个别名吗?

最佳答案

remove_method 在大多数情况下应该有效。但是,如果您的 alias_method 覆盖了现有方法,您可能需要通过单独的 alias_method 调用来保存原始方法。

# assuming :contains? is already a method 
alias_method :original_contains?, :contains?
alias_method :contains?, :include?

然后恢复原来的状态:

alias_method :contains?, :original_contains?
remove_method :original_contains? # optional

另请注意,修改在多线程中使用的类很容易出现竞争条件。而且,如果您试图禁止库使用别名,那么如果您在别名存在时调用这些库的方法,则无法阻止这种情况。我们可能会在 ruby​​ 2.0 中看到这样做的方法:http://yehudakatz.com/2010/11/30/ruby-2-0-refinements-in-practice/

如果您能说明为什么要删除别名,将会很有帮助。如果该方法名称之前不存在,则您的猴子补丁不会影响其他库。此外,您应该考虑子类化 String(或委托(delegate)给字符串实例)而不是修补 String

关于ruby - 我可以删除 Ruby 中的方法别名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11457190/

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