【发布时间】:2011-08-07 00:17:12
【问题描述】:
我知道我可以执行以下向 String 类添加方法
class String
def do_something
puts self.size
end
end
var = "test"
var.do_something
这将返回4
我希望能够拥有一个带有接收字符串的函数的模块,但能够在该字符串上调用do_something 方法(例如,请参见下文)- 有可能吗?
编辑:添加了不起作用的示例代码
module TestModule
class String
def do_something
puts self.size
end
end
def self.test(str)
str.do_something
end
end
这给出了错误:undefined method 'do_something' for "hello":String (NoMethodError)
【问题讨论】:
-
是的。您的代码完全按照编写的方式工作。当您在 String 中定义 doSomething 时,它适用于所有字符串,在所有范围内。
-
@John Douthat 它不起作用,我已经编辑了问题以显示我正在运行的代码
-
你是想让字符串在你的模块范围内有这个功能吗?
-
Ruby不使用camelCase,所以应该是do_something。只是说':)
-
Ruby 也使用 2 个空格缩进。也只是说。
标签: ruby monkeypatching ruby-1.9.2