将对象添加到数组的数组中
我正在尝试将一个对象添加到数组数组中,但是当我这样做时,我在数组单元测试数组中收到一个错误,指出:-“nil:NilClass 的未定义方法‘has_key’”。但是,如果我尝试将字符串或数字添加到数组的数组中,它绝对可以正常工作。
我像这样设置了我的数组
@array_of_array= Array.new(5) { Array.new(3) }
现在如果我尝试这样做
@array_of_array[0][0] = MyObject.new
然后如果我针对 @array_of_array 运行单元测试,我会收到错误。
但如果我尝试这样做
@array_of_array[0][0] = 'Test'
就没有问题。
--已编辑---
这是失败的测试
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')
结束
我是 ruby 新手,所以不确定哪里出了问题。谢谢
I am trying to add an object to an array of arrays, but when i do, i am recieving an error in my array of array unit tests, stating :- "undefined method 'has_key' for nil:NilClass". However, if i try and add a string or number to the array of array, it works absolutely fine.
I set up my array of arrays like this
@array_of_array= Array.new(5) { Array.new(3) }
Now if I try to do this
@array_of_array[0][0] = MyObject.new
Then if I run my unit tests against @array_of_array, i get the error.
But if I try to do this
@array_of_array[0][0] = 'Test'
Theres no problem.
--Edited---
Heres failing test
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')
end
Im new to ruby, so unsure of where im going wrong. Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
正如 Claw 所说,该错误可能意味着您的 MyObject.new 语句由于某种原因返回 nil 对象。然后您尝试调用该 nil 对象的函数“has_key”。
如果您使用
.new!
而不是.new
,您的 MyObject 类是否会引发异常?如果是这样,您就会明白为什么它无法返回正确的 MyObject 对象。编辑
要捕获 MyObject 模型的“新”方法中的异常,您可以执行以下操作:
Like Claw said, the error probably means that your
MyObject.new
statement is returning a nil object for some reason. Then you're trying to call the function 'has_key' of that nil object.Does your MyObject class throw an exception if you use
.new!
instead of.new
? If so, you could see why it's failing to return a proper MyObject object.Edit
To catch an exception inside your 'new' method for the MyObject model, you could do something like: