gpt4 book ai didi

ruby - 向命名空间中的字符串添加方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:16 27 4
gpt4 key购买 nike

我正在 String 上定义一些新方法。我需要确保这些方法不与其他库中定义的方法冲突(作为引用,我创建了一个变形器,然后将 pluralizesingularize 添加到 String)。

我的第一个想法是像这样将新内容包装在一个模块中:

module MM
class String
def rev
self.split('').reverse.join('')
end
end
end

class Test
include MM

def me(s)
s.rev
end
end

puts Test.new.me('this is a test')

但这当然行不通。 String#rev 仍未定义。我的代码中真正拥有的是一个模块 MM,除了内置类型扩展之外的所有内容都包含在 MM 中。我的目标是让 String 拥有 revsingularizepluralize 等方法,但仅限于该模块内部,MM.

这看起来应该是可行的。但不知何故,我错过了使它成为现实的 secret 咒语。

如果有人能提供一些建议,我们将不胜感激。

最佳答案

您正在寻找“改进”。它们是 Ruby 2.0 中的一项实验性功能,因此如果您不使用 2.0,您可能会倒霉。我自己还没有使用过它们,但是您的示例几乎是改进的规范用例。使用 refineusing 关键字来获得您想要的行为:

module MM
refine class String
def rev
self.split('').reverse.join('')
end
end
end

class Test
using MM

def me(s)
s.rev
end
end

puts Test.new.me('this is a test')

关于ruby - 向命名空间中的字符串添加方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15235199/

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