2016-11-14 97 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'。我解決了這個問題,現在它完美地工作,非常感謝 –

相關問題