def动作完全解析

def是1.19之后新出现的动作。

语法说明


def(variable,type, value)

以指定的type类型定义一个新的变量variable,也可以选择性指定value

参数:

  • variable
    • 变量名。
    • 若不存在则自动创建该变量。
  • type
    • 变量类型。
    • 可用的类型:
      • boolean – true 或 false
      • number – 数值类型
      • integer – 整数类型
      • string – 字符串
      • object – 自定义属性的对象
  • value(可选)
    • 该变量的新数值。
    • 如果没有赋值,而变量已经存在,则变量当前的数值转换为指定的类型。
    • 如果没有赋值,而变量不存在,则使用以下默认值:boolean=false, number=NaN (非数字), integer=0, string=null
    • 当类型为对象时,无法设置数值。
ico-example 示例
def(b, boolean, true);
def(n, number, 123.456);
def(s, string, ‘text’);
def(obj, object);
def(obj.x, number, 0.0);
def(obj.y, number, 0.0);

 

详细说明

上面就是def的官方说明文档。实际上已经非常清楚。目前krpano官方提供了五种数据类型的定义,分别是:
  • boolean – 布尔值类型,也就是true或者false,默认值为false
  • number – 数值类型,相当于js的number,其默认值是NaN
  • integer – 整数类型,默认值为0
  • string – 字符串,默认值为null
  • object – 自定义属性的对象,对象自身无法设置数值,对象下的各个属性如果是非对象才能设置数值。

我们来看看:

我们把b这个变量定义为布尔类型,值为true。当我们输出其值的非运算时,那就是false。

事实上,这个相当于

那么def和set的区别是什么呢?

def的话必须指定类型,但可以不赋值,它有自己的默认值。

set不用指定类型,但必须赋值,krpano根据数值自动分配数据类型。

对比以下两段代码

以及

结果是一样的,但后面的代码相当于赋值了两次。

而前面的代码相当于做了个数据类型的转换。

set只有两个参数,两个参数都是必选的,必须指定变量和其数值。

def可以有三个参数,其中前面两个是必选的,但可以不使用第三个参数。

另外一个显而易见的好处就是,定义了数据类型后,在代码的可读性和逻辑上也大有改观。