gen_empty_obj算子的作用


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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM