gen_empty_obj 算子解释: Create an empty object tuple

其算子签名为:

gen_empty_obj( : EmptyObject : : )

 

那么有人要问:创建一个空的object有什么用呢?

其实gen_empty_obj 的作用类似于面向对象编程中的“类的实例化”,可以防止“空引用异常

 

语句gen_empty_obj( EmptyObject )的意思是:EmptyObject 是真实存在的一个object(因为它被创建出来了),只是这个object的内容为空而已。有点类似集合论中的:{∅} != ∅

 

举个例子说明。

main函数如下:

 

get_rectangle (Image, rectangle)函数内容如下:

 1 * gen_empty_obj (rectangle)
 2 threshold (Image, Region, 128, 255)
 3 fill_up (Region, RegionFillUp)
 4 connection (RegionFillUp, ConnectedRegions)
 5 select_shape (ConnectedRegions, ConnectedRegions, 'area', 'and', 4000, 9999999)
 6 count_obj (ConnectedRegions, Number)
 7 
 8 if (Number > 5)
 9 select_shape (ConnectedRegions, rectangle, 'rectangularity', 'and', 0.99, 1)
10 endif
11 
12 return ()

 

按F5执行,报错如下:

 

为什么会这样呢?

函数中Number的值为3,因此进不了if(Number > 5)语句内部,所以rectangle变量就没有生成,也就是说rectangle变量根本没有出现过。

本来rectangle变量没出现过并不是什么问题,但是你在main函数中用count_obj (rectangle, Number)强行取rectangle的个数那就是问题了——你怎么能取一个从来不存在的对象(object)的个数呢?

 

如果要解决这种异常,只需要将函数中被注释的第一行代码取消注释即可。这样rectangle就被实例化了:

这样执行count_obj (rectangle, Number)也就不会报错了,它得到的rectangle的个数为0。

 

posted on 2018-09-05 17:23  xh6300  阅读(3242)  评论(0编辑  收藏  举报