====== Covariant Script 作用域和命名空间 ====== ===== 4.1 定义(definition) ===== block 语句块 end \\ ===== 定义一个临时作用域 ===== 临时作用域中的变量会在离开作用域后销毁 namespace 命名空间名 语句块 end \\ ==== 定义一个命名空间 ==== 命名空间中只允许引入其他命名空间,变量定义,函数定义,类型定义以及命名空间定义 using 命名空间名 引入一个命名空间,这将会在当前作用域中建立引入的命名空间中所有变量的引用 ----- \\ ===== 4.2 名称查找 ===== ==== 变量名 ==== === 从最上层作用域开始向下查找变量 === local.变量名 \\ === 查找当前作用域中的变量 === global.变量名 \\ === 查找全局作用域中的变量 === 命名空间名.变量名 \\ === 查找命名空间中的变量 === 变量名.变量名 \\ === 查找结构体或扩展中的变量 === 作用域结构以及变量查找方式如图所示 {{:manual:reference:grammar:namespace:r4.2.png?nolink&400|}}
注意,对于最后一种访问方法,仅变量类型为结构或支持扩展的类型时可用,如访问的是扩展或结构中的函数,将会自动把点运算符左边的变量作为函数的第一个参数传入。
也就是说:char.isspace(ch) 等价于ch.isspace()
除此之外,支持扩展的类型将自动调用无参数的成员访问函数(无需填写任何参数)
也就是说:string.size(str)等价于 str.size
这种“域下常规函数转成员函数”(函数/变量)的行为我们称之为“成员访问器”(Member Visitor)