当数组中的对象没有预期的属性时抛出异常

时间:2014-08-12 18:56:51

标签: ruby arrays exception

我对红宝石很新,而且我写了一个刮刀,刮擦了汽车网站。我有一个数组,应该有汽车,但由于刮擦,似乎在数组中有一些意想不到的对象。我在我的代码中执行以下操作:

car_manufacture = car_array.map{|c| c.manufacture}

现在有时我car_array中的物体实际上不是汽车物品,也没有制造物品。在这种情况下,我想抛出异常并记录对象。我似乎无法弄清楚如何做到这一点。

以下是我尝试过的一些事情:

car_array.map{|c| c.manufacture}.each{|c| !c.manufacture raise RuntimeError, "Error: Unknown object"}

它似乎并没有起作用。理想情况下,我希望抛出异常并记录,然后继续前进。基本上只是忽略数组中的对象。

1 个答案:

答案 0 :(得分:1)

您可以使用partition将这些内容拆分出来并跟踪没有信息的内容。

with, without = car_array.partition { |car| !!car.manufacture }

现在您有2个数组,with包含manufacture有某些内容的汽车,without包含没有数据的数据。根据需要记录或投掷。

您现在也可以安全地获得制造商:

car_manufacture = with.map(&:manufacture)