所以,我正在学习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")
行上。为什么拒绝连接字符串?
答案 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
。这与标准变量不同,后者会引发未定义的变量错误。