Ruby未知+试图加入2个字符串

时间:2016-07-12 20:24:07

标签: ruby string

所以,我正在学习Ruby,并且在尝试将2个字符串连接到1时,偶然发现了一些特殊的评价。这里是代码,剥离了无关紧要的部分,让我们说Sinatra运行它:

class CMS
    # Set the site path root.
    @sitePath = "./site"

    get '/' do
        renderCache = File.readlines(@sitePath + "index.liquid")
    end
end

在加载页面时,我受到了欢迎

NoMethodError at /
undefined method `+' for nil:NilClass
renderCache = File.readlines(@sitePath + "index.liquid")行上

。为什么拒绝连接字符串?

1 个答案:

答案 0 :(得分:3)

您无法在班级设置实例变量。您需要在实例方法中设置它们。

看起来像你正在使用sinatra所以你可以这样做:

请参阅here了解如何制作"过滤器"就像在Rails应用程序中一样。此解决方案适用于Sinatra应用程序的模块化样式。

举例:

class CMS < Sinatra::Base
  before do
    @sitePath = "./site"
  end
  get '/' do
    renderCache = File.readlines(@sitePath + "index.liquid")
  end
end
CMS.run!

如果使用常量而不是实例变量,也可以保留现有代码:

class CMS
    # Set the site path root.
    SitePath = "./site"

    get '/' do
        renderCache = File.readlines(CMS::SitePath + "index.liquid")
    end
end

解释我如何阅读您的错误并查找错误:

undefined method '+' for nil:NilClass表示您正在调用+上的内容为零。引用代码显示nil变量为@sitePath。未定义的实例变量将评估为nil。这与标准变量不同,后者会引发未定义的变量错误。