Ruby:nil的未定义方法`length':NilClass

时间:2016-11-14 19:27:41

标签: ruby-on-rails ruby

我对这段代码有疑问,因为出于某种原因我无法使用方法length

def comidayprop()
  aux=""
  tam=@comida.lenght
  i=0
  for i in (0..tam-1)
    aux<<"- #{@comida[i]}#{@prop_aprox[i]}#{@prop_exact[i]}"
    i+=1
    aux+="\n"
  end
  "#{aux}"
end

稍后,我使用它来显示aux中保存的内容:

def to_s
  "Menú basado en #{@tipo}:\n#{m_nombre}\n#{comidayprop}\n#{vct}\n"
end

我尝试使用countsize代替length,但它们不起作用。

1 个答案:

答案 0 :(得分:2)

首先,您写了lenght而不是length

然后,您正在调用的对象length为nil,这可能意味着它未正确初始化或存在一些丢失的数据。

此外,您无需使用i增加i = i+1,这是由for循环完成的。顺便说一句,使用each被认为是比for更好的做法。

最后,当"#{aux}"已经是字符串时,aux只是aux

只要它是零,您就无法拨打sizecount@comida上的任何有趣内容。

您的代码可能会缩短一点。

@comida为零时,此字符串将返回空字符串。但@comida是否可能为零?:

def comidayprop
  aux=""
  (@comida || []).each_with_index do |x,i|
    aux<<"- #{x}#{@prop_aprox[i]}#{@prop_exact[i]}\n"
  end
  aux
end