2011-10-21 216 views
0

我想将一个对象添加到数组数组,但是当我这样做时,我收到阵列单元测试数组中的错误,指出: - “未定义方法has_key”for零:NilClass”。但是,如果我尝试添加一个字符串或数字到数组的数组,它的工作原理绝对没问题。将对象添加到数组数组

设置我的数组的数组这样

@array_of_array= Array.new(5) { Array.new(3) } 

现在,如果我尝试,如果我跑我的单元测试对@array_of_array做到这一点

@array_of_array[0][0] = MyObject.new 

然后,我得到的错误。

但是,如果我尝试这样做

@array_of_array[0][0] = 'Test' 

世界上没有问题。

--Edited ---

继承人失败的测试

it "should place object in correct starting position" do 
array_of_array= Array.new(5) { Array.new(3) } 
array_of_array[1][0] = MyObject.new 
array_of_array.should eql('fail on purpose..want to see output') 

进出口新的红宝石,所以不能确定哪里我去错了。谢谢

+2

能否请您提供失败测试的代码? – ecoologic

+2

适用于我。 'has_key'是在哈希上调用的方法,而不是数组,因此可以粘贴堆栈跟踪吗? – tadman

+1

是否会执行'a = MyObject.new'? – ecoologic

回答

1

赞Claw说,错误可能意味着你的MyObject.new声明由于某种原因返回一个零对象。然后你试图调用那个零对象的函数'has_key'。

如果您使用.new!而不是.new,您的MyObject类是否会抛出异常?如果是这样,你可以看到为什么它无法返回一个合适的MyObject对象。

编辑

为了赶上了MyObject的模型的“新”方法内部异常,你可以这样做:

def new 
    begin 
     #whatever is done in this method 
    rescue => exception 
     puts exception.message 
    end 
end 
+0

好吧,当我尝试MyObject.new!我得到: - NoMethodError:未定义的方法'新!'对于MyObject – namtax

+0

是的。因此,没有为您的MyObject类抛出.new方法的异常。你可以在模型中的'new'函数中放置一个开始救援语句,看看它是否抛出一个异常(看看答案中的编辑)。 –

+0

嗨Vota我实际上放弃了将对象存储在数组中的方法,所以没有机会尝试你的解决方案。这是错误发生的原因,因为新语句返回了一个零对象。 – namtax