2016-11-14 63 views
-3

我有这个代码片段中的问题,因为出于某种原因我不能使用的方法length红宝石:未定义的方法`长度”的零:NilClass

def comidayprop() 
    aux="" 
    [email protected] 
    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

两件事情,尽量缩进你的代码,你有一个预览发布前进行检查。另一方面,你知道你定义'@ comida'的位置吗?您试图使用'@ comida'的长度方法,并且@ @ comida'未定义 –

+1

尝试发布更完整的代码,例如您发布的这些方法的完整文件,这将会非常有帮助 –

+1

没有理由使用'“#{aux}”',只需放入'aux'。也可以尝试使用'aux <<“\ n”'类型而不是'+ ='。 – tadman

回答

1

首先,你写lenght,而不是length

然后,你在呼唤length的对象是零,这可能意味着它没有正确初始化或有一些丢失的数据。

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

最后,"#{aux}"只是auxaux已经是一个字符串。

只要为零,您将无法拨打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 
+1

你对'@comida'没有'@prop_aprox'和'@prop_exact'。我解决了这个问题,现在它完美地工作,非常感谢 –

相关问题