引导引擎,内核引擎(编译引擎),
引导引擎【含 变量的内存地址和对应的内核引擎的类型】
内核引擎(编译引擎)
内核引擎判断顺序:类型 -> 变量 -> 值
内核引擎,它判断了哪些事情呢?
(类型)类型:类的类型
(类型)方法:类的方法
(类型)变量:被定义的变量,有作用域的变量,未被定义的是值
(类型)值:被定义的叫变量,因此未被定义的就是值,比如直接代码中写3.14,就是个值,它是没有指针的。
【示例一】如何判断3.14?
当遇到 . 的时候,调用引擎,编译引擎获取到 3.14不是个"类",因为它是没有指针的(会继续执行),依次判断到3.14它不是个变量(因为它没有指向一块内存地址,它就是个临时的值,也是临时的内存地址),最后判断它就是一个值,若是值就不必调用引擎(它存储在临时内存,既栈中)。
否则例如:person.eye(人的眼睛),截取到 . 之前,我们判断到 person有指针,而且它是一个"类"的类型,我们就能够调用person这个类了。
一个变量过来,在引擎中我们先找这个变量的引用地址,这个引用地址它包含:引用地址和它本身对应的内核引擎(类?方法?变量?值?)。
当我们知道了这个变量的类型(类?方法?变量?值?),我们就能够调用【内核引擎】,通过内核引擎 (比如 person 去实例化 person这个类),当遇到 . 的时候回到【示例一】
- .(点)代表特殊引擎,当输入 . 的时候先判断数据类型(是对象引擎?类的方法引擎?还是数据内核引擎?,比如 人 . 眼睛,人就是对象类型;3.14就是),当前被定义了什么类型,接着调用这个类型的引擎( . 本来也是个引擎,它优先于内核引擎【内核引擎:[ ], { }】)
- 何时调用引擎?当出现特殊符号时候: 【 符号引擎 [ ] , { } ," " 】, 【 方法引擎 toArray(), toInt(), toObj() 】 【 变量引擎 temp, hello 】
- 定义变量作用域,类私有方法和属性(方法加var),类的外部可访问方法(不加var),避免像go一样大小写混杂
- 定义数据类型: 数组 [ ] , 对象{ }, 字符串对象" ",布尔?,存在吗??(方法,属性,值),
- 定义根据参数个数调用类的哪个方法,在构造函数cons中判断调用者传过来了几个参数