6.1 模块的导入 (import)
-
核心概念: 模块是一种将相关代码组织在一起的机制,可以提高代码的可重用性和可维护性。
-
import
语句: 用于导入其他模块中的函数、变量和数据类型。 -
语法:
import 模块名;
-
模块名: 指要导入的模块的标识符,通常对应于一个
.fs
文件。 -
模块查找: FlexScript 解释器会按照一定的搜索路径查找模块文件。
-
模块作用域: 导入模块后,可以使用
模块名.成员名
的方式访问模块中的成员。 -
示例代码:
// 模块文件:math_utils.fs int add(int a, int b) { return a + b; } // 主程序文件:main.fs import math_utils; int result = math_utils.add(10, 20); print(result); // 输出 30
-
模块别名: 可以使用
as
关键字为导入的模块指定别名。import math_utils as math; int result = math.add(10, 20);
-
部分导入: 可以使用
from
关键字从模块中导入特定的成员。from math_utils import add; int result = add(10, 20);
-
模块初始化: 模块文件中的顶层代码会在模块导入时执行一次,用于初始化模块。
6.2 脚本的包含 (include)
-
核心概念:
include
语句用于将一个脚本文件中的代码插入到当前脚本中。 -
语法:
include "文件名.fs";
-
文件名: 指要包含的脚本文件的路径,可以是相对路径或绝对路径。
-
包含作用: 被包含的脚本文件中的代码会直接插入到
include
语句所在的位置。 -
包含时机:
include
语句在编译时执行,而不是在运行时执行。 -
示例代码:
// 文件:common_functions.fs void printLine() { print("--------------------"); } // 主程序文件:main.fs printLine(); // 错误,printLine 未定义 include "common_functions.fs"; printLine(); // 输出 --------------------
-
包含路径: 包含文件时,解释器会按照一定的搜索路径查找文件。
-
嵌套包含: 脚本文件可以包含其他脚本文件,形成嵌套包含。
-
避免循环包含: 应该避免循环包含,否则会导致编译错误。
6.3 模块搜索路径
-
核心概念: FlexScript 解释器在导入模块或包含脚本时,会按照一定的搜索路径查找文件。
-
搜索路径配置: 搜索路径可以通过环境变量或配置文件进行配置。
-
默认搜索路径: 默认搜索路径通常包括当前目录和标准库目录。
-
添加搜索路径: 可以通过设置环境变量或配置文件来添加额外的搜索路径。
-
搜索顺序: 解释器会按照搜索路径的顺序查找文件,找到第一个匹配的文件后停止搜索。
-
示例代码(假设搜索路径包含 “/path/to/modules”):
// 假设 /path/to/modules/my_module.fs 存在 import my_module; // 解释器会在 /path/to/modules 中查找 my_module.fs
-
模块文件组织: 建议将模块文件放在一个专门的目录中,并将其添加到搜索路径中。
-
避免文件名冲突: 应该避免不同模块使用相同的文件名,以免发生冲突。
6.4 模块和脚本的区别
- 作用域: 模块具有独立的作用域,可以通过
模块名.成员名
的方式访问模块中的成员。脚本则没有独立的作用域,被包含的脚本中的代码会直接插入到当前脚本中。 - 导入和包含: 模块使用
import
语句导入,脚本使用include
语句包含。 - 执行时机: 模块在运行时导入,脚本在编译时包含。
- 重用性: 模块可以被多个脚本重复使用,脚本则通常只被包含一次。
- 组织方式: 模块通常用于组织相关功能的代码,脚本则通常用于组织特定的任务或流程。