如果我定期运行这个简单的Ruby代码,它可以正常工作:
class String
def add_two
self + "2"
end
end
puts "hello".add_two
它应该打印“hello2”。但这失败了:
:ruby
class String
def add_two
self + "2"
end
end
puts "hello".add_two
此代码产生错误:
NoMethodError at /
undefined method `add_two' for "hello":String
任何想法有什么不对?
(不确定它是否重要,但我正在使用HAML与Sinatra,它在带有Passenger模块的Apache上运行。)
答案 0 :(得分:2)
我建议String在另一个名称空间中,因此另一个类。
那会怎么样?
class ::String
答案 1 :(得分:1)
我将你的代码原样放入我在Rails应用程序中的一个Haml视图中,我得到了一个不同的错误:
SyntaxError at /
class definition in method body
所以我想知道是Haml's :ruby
filter是否抱怨,但由于它“使用普通的Ruby解释器解析过滤后的文本”,似乎不太可能。所以,我搜索了有关错误的更多信息,并找到了引导我的参考文献(见下文),这有用(但实际上,绝对不应该使用):
:ruby
String.module_eval do
def add_two
self + "2"
end
end
puts "hello".add_two
参考文献: