首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby语言中的NoMethodError

Ruby语言中的NoMethodError
EN

Stack Overflow用户
提问于 2011-09-07 04:24:58
回答 2查看 1.3K关注 0票数 2

我有一些ruby代码:

代码语言:javascript
复制
def createCal(cal)
    mod = @on + @off #line creating error.
    @daycount = 0       
    cal
  end

这将生成以下错误: NoMethodError at /calendar undefined method `+‘for nil:NilClass file: main.rb location: createCal line: 83

我在Sinatra中使用它,所以我可以将@on和@off打印到网页上,我可以确认它们实际上是被加载了值。我还在我的haml模板中做了一个'@ooo = @on + @ off‘,结果是7,这是意料之中的,因为on是4,off是3。

有什么想法吗?

更新:

下面是我处理“开”和“关”的方法

代码语言:javascript
复制
post '/calendar' do
  @on = params["on"]
  @off = params["off"]
  @date = params["date"]
  a = Doer.new
  @var = a.makeDate(@date)
  @on = @on.to_i
  @off = @off.to_i
  @ooo = @on + @off
  @cal = a.makeCal(@var)
  haml :feeling
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-07 04:47:05

您将访问两个不同的实例变量:

  • @on in post是Sinatra实例的实例变量。
  • @on in createCal是Doer实例的实例变量。

要像您希望的那样使用@on@off,您需要将它们更改为传递给createCal方法的参数。如下所示:

代码语言:javascript
复制
class Doer
  def createCal(cal, on, off)
    mod = on + off
    # more code...
    cal
  end
end

post '/calendar' do
  a = Doer.new
  date = a.makeDate params['date']
  @cal = a.makeCal date, params['on'], params['off']

  haml :some_template
end
票数 2
EN

Stack Overflow用户

发布于 2011-09-07 04:31:58

您的实例变量可能不在该方法的作用域中。尝试以下操作来测试此理论:

代码语言:javascript
复制
def createCal(cal, on, off, daycount)
  mod = on + off #line creating error.
  daycount = 0       
  cal
end

并使用以下命令调用它(在/calendar块中):

代码语言:javascript
复制
createCal(cal, @on, @off, @daycount)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7325726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档