为什么这个简单的Ruby代码不能在HAML中运行?

时间:2013-03-09 11:14:55

标签: ruby sinatra haml

如果我定期运行这个简单的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上运行。)

2 个答案:

答案 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

参考文献: