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。
--------------------------------------------
本文系原创,转载请注明出处。
如果文章对您有帮助,可以点击下方的【好文要顶】或【关注我】;如果您想进一步表示感谢,可通过网页右侧的【打赏】功能进行打赏。
感谢您的支持,我会继续写出更多的相关文章!文章有不理解的地方欢迎跟帖交流,博主经常在线!^_^