• 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。

  • 相关阅读:
    面向对象的JavaScript-009-闭包
    面向对象的JavaScript-007-Function.prototype.bind() 的4种作用
    面向对象的JavaScript-006-Function.prototype.apply()的3种作用
    面向对象的JavaScript-005-Function.prototype.call()的3种作用
    面向对象的JavaScript-004
    面向对象的JavaScript-003
    面向对象的JavaScript-002
    面向对象的JavaScript-001
    IOC容器特性注入第一篇:程序集反射查找
    AWS EC2 在WINDOWS平台使用FSX
  • 原文地址:https://www.cnblogs.com/xh6300/p/9593353.html
Copyright © 2020-2023  润新知