差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
manual:reference:package:standard:main_page [2023/03/23 15:25] mikecovleemanual:reference:package:standard:main_page [2023/07/17 16:25] (当前版本) – [解释器上下文环境] mikecovlee
行 1: 行 1:
 ====== Covariant Script 标准包 ====== ====== Covariant Script 标准包 ======
 +标准包是内置于 CovScript 解释器中的各类功能和函数,是标准的组成部分之一
 \\ \\
 ===== 3.1 全局作用域(global) ===== ===== 3.1 全局作用域(global) =====
行 19: 行 20:
 \\ \\
 ^**单例对象**  ^**描述**  ^ ^**单例对象**  ^**描述**  ^
-| ''context''  | 解释器上下文环境 |+| ''context'' [[:manual:reference:package:standard:main_page#解释器上下文环境|解释器上下文环境 ]] |
 \\ \\
 ^**类型**  ^**描述**  ^ ^**类型**  ^**描述**  ^
行 92: 行 93:
 |''bin_out''  |为写打开(清空内容, 输出流, 二进制)  | |''bin_out''  |为写打开(清空内容, 输出流, 二进制)  |
 |''app''  |为写打开(追加内容, 输出流)  | |''app''  |为写打开(追加内容, 输出流)  |
-|''bin_app''  |为写打开(追加内容, 输出流, 二进制 |+|''bin_app''  |为写打开(追加内容, 输出流, 二进制)  |
  
 ==== 3.3.3 输入流(istream) ==== ==== 3.3.3 输入流(istream) ====
行 143: 行 144:
 \\ \\
 ^方法  ^描述  ^ ^方法  ^描述  ^
-|void **exit**(number)  |清理资源并退出进程 |+|void **exit**(number)  |清理资源并退出进程,在协程中无效 |
 |boolean **is_platform_darwin**()  |判断是否为 macOS 平台 | |boolean **is_platform_darwin**()  |判断是否为 macOS 平台 |
 |boolean **is_platform_linux**()  |判定是否为 Linux 平台 | |boolean **is_platform_linux**()  |判定是否为 Linux 平台 |
行 149: 行 150:
 |boolean **is_platform_windows**()  |判定是否为 Windows 平台 | |boolean **is_platform_windows**()  |判定是否为 Windows 平台 |
 |number **run**(string)  |在系统环境中运行一条指令,并返回错误码 | |number **run**(string)  |在系统环境中运行一条指令,并返回错误码 |
-|string **getenv**(string)  |获取环境变量 |+|string **getenv**(string)  |获取环境变量,当未找到时抛出异常 |
  
  
行 160: 行 161:
 |void **gotoxy**(number x, number y)  |移动光标至x,y | |void **gotoxy**(number x, number y)  |移动光标至x,y |
 |bool **kbhit**()  |判断是否有键盘输入 | |bool **kbhit**()  |判断是否有键盘输入 |
-|number **terminal_height**()  |获取控制台高度(单位:像素) | 
 |number **terminal_width**()  |获取控制台宽度(单位:像素) | |number **terminal_width**()  |获取控制台宽度(单位:像素) |
 +|number **terminal_height**()  |获取控制台高度(单位:像素) |
  
  
行 167: 行 168:
  
 ^方法  ^描述 ^ ^方法  ^描述 ^
-|boolean **copy**(string path, string target_path)  |复制path文件到targetpath。若path不存在则 target_path 为空文件且返回 false,否则返回 true;若 target_path 已存在则覆盖 | +|boolean **copy**(string path, string target_path)  | 复制path文件到targetpath。若path不存在则 target_path 为空文件且返回 false,否则返回 true;若 target_path 已存在则覆盖 | 
-|boolean **remove**(string path)  |删除文件 | +|boolean **remove**(string path)  | 删除文件 | 
-|boolean **exists**(string path)  |判断文件是否存在 | +|boolean **exist**(string path)  | 判断文件是否存在 | 
-|boolean **rename**(string path,string target_path)  |重命名/移动文件。若path不存在或target_path存在则不执行,且返回 false,否则返回 true | +|boolean **rename**(string path,string target_path)  | 重命名/移动文件。若path不存在或target_path存在则不执行,且返回 false,否则返回 true | 
-|boolean **is_file**(string path)  |判定一个路径是否为文件 | +|number **ctime**(string path) | 返回文件的创建时间 (Unix Time) 
-|boolean **is_directory**(string path)  |判定一个路径是否为目录 +|number **mtime**(string path) | 返回文件的修改时间 (Unix Time) 
-|boolean **can_read**(string path)  |判定一个路径是否具有可读权限 | +|boolean **can_read**(string path)  | 判定一个路径是否具有可读权限 | 
-|boolean **can_write**(string path)  |判定一个路径是否具有可写权限 | +|boolean **can_write**(string path)  | 判定一个路径是否具有可写权限 | 
-|boolean **can_execute**(string path)  |判定一个文件是否为可执行文件 | +|boolean **can_execute**(string path)  | 判定一个文件是否为可执行文件 
-|boolean **mkdir**(string path)  |创建一个目录,成功返回真 | + 
-|boolean **mkdir_p**(string path)  |递归创建一个目录,成功返回真 | +==== 3.4.3 路径(system.path) ==== 
-|boolean **chmod**(string path,string mod)  |更改路径权限 | + 
-|boolean **chmod_r**(string path,string mod)  |递归更改路径权限 |+^命名空间  ^描述 
 +| ''type''  |[[:manual:reference:package:standard:main_page#3.4.3.1 路径类型(system.path.type)| 3.4.3.1 路径类型命名空间]] 
 +| ''info''  |[[:manual:reference:package:standard:main_page#3.4.3.2 路径信息(system.path.info)| 3.4.3.2 路径信息命名空间]] 
 +\\ 
 +^单例对象与方法  ^描述 
 +|char **separator**  | 路径分隔符 | 
 +|char **delimiter**  | 路径定界符 | 
 +|array **scan**(string)  | 扫描路径并返回由 path_info 类型组成的 array | 
 +|boolean **copy**(string path, string target_path)  | 复制path文件到targetpath。若path不存在则 target_path 为空文件且返回 false,否则返回 true;若 target_path 已存在则覆盖 | 
 +|boolean **remove**(string path)  | 删除文件 | 
 +|boolean **exist**(string path)  | 判断目录是否存在 | 
 +|boolean **rename**(string path,string target_path)  | 重命名/移动文件。若path不存在或target_path存在则不执行,且返回 false,否则返回 true 
 +|boolean **mkdir**(string path)  | 创建一个目录,成功返回真 | 
 +|boolean **mkdir_p**(string path)  | 递归创建一个目录,成功返回真 | 
 +|boolean **chmod**(string path,string mod)  | 更改路径权限 | 
 +|boolean **chmod_r**(string path,string mod)  | 递归更改路径权限 
 +|boolean **is_file**(string path)  | 判定一个路径是否为文件 | 
 +|boolean **is_directory**(string path)  | 判定一个路径是否为目录 |
  
 <html> <html>
行 193: 行 211:
 </html> </html>
  
-==== 3.4.3 路径(system.path) ==== +=== 3.4.3.1 路径类型(system.path.type) ===
- +
-^命名空间  ^描述 +
-| ''type''  |[[:manual:reference:package:standard:main_page#3.4.3.1 路径类型(system.type)| 3.4.3.1路径类型命名空间]] +
-| ''info''  |[[:manual:reference:package:standard:main_page#3.4.3.2 路径信息(system.path.info)| 3.4.3.2路径信息命名空间]] +
-\\ +
-^单例对象与方法  ^描述 +
-|char **separator**  |路径分隔符 | +
-|char **delimiter**  |路径定界符 | +
-|array **scan**(string)  |扫描路径并返回由 path_info 类型组成的 array | +
- +
-=== 3.4.3.1 路径类型(system.type) ===+
  
 ^选项代码  ^描述  ^ ^选项代码  ^描述  ^
行 226: 行 233:
  
 ===== 3.5 运行时(runtime) ===== ===== 3.5 运行时(runtime) =====
 +==== 运行时命名空间 ====
  
 ^命名空间  ^描述  ^ ^命名空间  ^描述  ^
-| ''time_type''  |[[:manual:reference:package:standard:main_page#3.5.1 时间类型命名空间(runtime.time_type)| 3.5.1时间类型命名空间]]  |+| ''time_type''  |[[:manual:reference:package:standard:main_page#3.5.1 时间类型命名空间(runtime.time_type)| 3.5.1 时间类型命名空间]]  |
  
-^单例对 ^描述 +^单例对象  ^描述 
-|number **std_version**  |标准版本号 |+|number **std_version**  | 标准版本号 |
  
 ^方法  ^描述  ^ ^方法  ^描述  ^
-|void **add_literal**([context], string literal, [function] func)  |注册字面量处理函数 | 
-|number **argument_count**([function] func)  |返回函数的参数数量 | 
-|[expression] **build**([context], string)  |构建一个可用于计算的表达式 | 
-|array **cmd_args**([context])  |*返回由 string 构成的运行参数 array | 
-|void **delay**(number)  |使程序暂停一段时间,单位毫秒(但不停止计时) | 
-|[exception] **exception**(string)  |返回一个新建运行时异常 | 
-|string **get_current_dir**()  |返回当前执行路径 | 
-|string **get_import_path**()  |获取引入目录 | 
-|[hash_value] **hash**(var)  |计算一个变量的哈希值 | 
-|[namespace] **import**([context], string folder_path, string name)  |从 folder_path 动态加载一个扩展,其规则与 import 语句相同 | 
 |void **info**()  |从标准输出流输出解释器版本信息 | |void **info**()  |从标准输出流输出解释器版本信息 |
-|[time_type] **local_time**()  |获取当地时间和日期 | +|[hash_value] **hash**(var)  |计算一个变量的哈希值 |
-|var **solve**([context], [expression])  |计算一个表达式 | +
-|[namespace] **source_import**([context], string path)  |动态加载一个扩展,需指定详细路径和文件名 |+
 |number **time**()  |获取计时器的读数,单位毫秒 | |number **time**()  |获取计时器的读数,单位毫秒 |
 +|void **delay**(number)  |使程序暂停一段时间,单位毫秒(但不停止计时) |
 +|[time_type] **local_time**()  |获取当地时间和日期 |
 +|[time_type] **local_time**(number unix_time)  |从 Unix Time 构建本地时间和日期 |
 |[time_type] **utc_time**()  |获取 UTC 时间和日期 | |[time_type] **utc_time**()  |获取 UTC 时间和日期 |
 +|[time_type] **utc_time**(number unix_time)  |从 Unix Time 构建 UTC 时间和日期 |
 +|[exception] **exception**(string)  |返回一个新建运行时异常 |
 +|number **argument_count**([function] func)  |返回函数的参数数量 |
 +|string **get_current_dir**()  |返回当前执行路径 |
 +|string **get_import_path**()  |获取引入目录 |
 |var **wait_for**(number time, [function] func, array args)  |使用传入的参数执行函数,等待指定时间(毫秒)后若函数仍未完成则抛出异常 | |var **wait_for**(number time, [function] func, array args)  |使用传入的参数执行函数,等待指定时间(毫秒)后若函数仍未完成则抛出异常 |
 |var **wait_until**(number time, [function] func, array args)  |使用传入的参数执行函数,直到指定时间(毫秒)后若函数仍未完成则抛出异常 | |var **wait_until**(number time, [function] func, array args)  |使用传入的参数执行函数,直到指定时间(毫秒)后若函数仍未完成则抛出异常 |
 +
 +==== 解释器上下文环境 ====
 +
 +^单例对象  ^描述  ^
 +|array **cmd_args** | 由 string 构成的运行参数 array |
 +|[type] **channel** | 协程消息队列类型 |
 +
 +^方法  ^描述  ^
 +|[expression] **build**([context], string)  | 构建一个可用于计算的表达式 |
 +|var **solve**([context], [expression])  | 计算一个表达式 |
 +|[namespace] **import**([context], string folder_path, string name)  | 从 folder_path 动态加载一个扩展,其规则与 import 语句相同,失败时返回null |
 +|[namespace] **source_import**([context], string path)  | 动态加载一个扩展,需指定详细路径和文件名,失败时返回null |
 +|void **add_literal**([context], string literal, [function] func)  | 注册字面量处理函数 |
 +|void **link_var**([context], var lhs, var rhs) | 建立 lhs 到 rhs 的引用 |
 +|void **unlink_var**([context], var val) | 拷贝引用所在内存区块并使其独立,并将其退化为变量 |
 +|[coroutine] **create_co**([context], [function] func) | 从函数创建一个协程 |
 +|[coroutine] **create_co_s**([context], [function] func, array args) | 从函数创建一个协程,并传入参数 |
 +|void **destroy_co**([context], [coroutine]) | 手动销毁协程 |
 +|var **await**([context], [function] func) | 异步等待函数执行完毕 |
 +|var **await_s**([context], [function] func, array args) | 异步等待函数执行完毕,并传入参数 |
 +|number **resume**([context], [coroutine]) | 切换至指定的协程,返回 -1 为异常,-2 为协程已退出 |
 +|void **yield**([context]) | 切换回主协程 |
 +
 +**注意,await 系列函数一般在协程中使用,用于在等待执行时间较长函数的过程中自动的将上下文交由其他协程使用(也就是自动 yield)**\\
 +**因此,await 系列函数应使用原始的 CovScript API,而不是 CovScript 函数 **
 +
 +=== 协程消息队列类型 ===
 +
 +^方法  ^描述  ^
 +|void **consumer**([channel], [coroutine]) |将指定协程设置为消费者 |
 +|void **push**([channel], var val) |发送数据至队列并唤醒消费者 |
 +|var **pop**([channel]) |异步读取数据,会将当前协程设置为消费者,并当队列为空时 yield |
 +|void **clear**([channel]) |清空队列 |
 +|void **touch**([channel]) |手动唤醒消费者 |
 +|number **size**([channel]) |获取队列大小 |
 +|boolean **empty**([channel]) |返回队列是否为空 |
  
 ==== 3.5.1 时间类型命名空间(runtime.time_type) ==== ==== 3.5.1 时间类型命名空间(runtime.time_type) ====
行 265: 行 305:
 |number **year**([time_type])  |*自 1900 起之年 | |number **year**([time_type])  |*自 1900 起之年 |
 |boolean **is_dst**([time_type])  |*是否为夏令时 | |boolean **is_dst**([time_type])  |*是否为夏令时 |
 +|number **unixtime**([time_type]) |*转换为 Unix Time |
  
 ----- -----
行 296: 行 337:
  
 ^单例对象  ^描述  ^ ^单例对象  ^描述  ^
-|number **max**  |数值类型最大值 | +|number **max**  |数值类型浮点实现最大值 | 
-|number **min**  |数值类型最小值 |+|number **min**  |数值类型浮点实现最小值 | 
 +|number **integer_max**  |数值类型整数实现最大值 | 
 +|number **integer_min**  |数值类型整数实现最小值 | 
 +|number **float_max**  |数值类型浮点实现最大值 | 
 +|number **float_min**  |数值类型浮点实现最小值 |
 |number **inf**  |数值类型正无穷 | |number **inf**  |数值类型正无穷 |
 |number **nan**  |数值类型无意义 | |number **nan**  |数值类型无意义 |
行 327: 行 372:
 \\ \\
  
-===== 3.8 字符串(string) =====+===== 3.8 数值(number) ===== 
 + 
 +^**方法**  ^**描述** 
 +|boolean **is_integer**(number)  |返回数值实现是否为整数 | 
 +|boolean **is_float**(number)  |返回数值实现是否为浮点 | 
 +|integer **ntoi**(number)  |将数值转换为整数实现 | 
 +|float **ntof**(number)  |将数值转换为浮点实现 | 
 + 
 +----- 
 +\\ 
 + 
 +===== 3.9 字符串(string) =====
  
 ^方法  ^描述  ^ ^方法  ^描述  ^
行 349: 行 405:
 \\ \\
  
-===== 3.数组(array) =====+===== 3.10 数组(array) =====
  
 ^命名空间  ^描述  ^ ^命名空间  ^描述  ^
-|''iterator''  |[[:manual:reference:package:standard:main_page#3.9.1 数组迭代器(array.iterator)| 3.9.1数组迭代器命名空间]]  |+|''iterator''  |[[:manual:reference:package:standard:main_page#3.10.1 数组迭代器(array.iterator)| 3.10.1数组迭代器命名空间]]  |
  
 ^方法  ^描述  ^ ^方法  ^描述  ^
行 369: 行 425:
 |void **push_back**(array, var)  |将元素添加到容器末尾  | |void **push_back**(array, var)  |将元素添加到容器末尾  |
 |var **pop_back**(array)  |删除最后一个元素并返回  | |var **pop_back**(array)  |删除最后一个元素并返回  |
 +|var **sort**(array, [function] func)  |使用 func 作为比较器对数组进行排序  |
 |list **to_list**(array)  |将数组转换为链表  | |list **to_list**(array)  |将数组转换为链表  |
 |hash_map **to_hash_map**(array)  |将数组转换为哈希映射,要求数组中元素必须都是映射  | |hash_map **to_hash_map**(array)  |将数组转换为哈希映射,要求数组中元素必须都是映射  |
行 376: 行 433:
 \\ \\
  
-==== 3.9.1 数组迭代器(array.iterator) ====+==== 3.10.1 数组迭代器(array.iterator) ====
  
 ^方法  ^描述  ^ ^方法  ^描述  ^
行 388: 行 445:
 \\ \\
  
-===== 3.10 线性表(list) =====+===== 3.11 线性表(list) =====
  
 ^命名空间  ^描述  ^ ^命名空间  ^描述  ^
-|''iterator''  |[[:manual:reference:package:standard:main_page#3.10.1 线性表迭代器(list.iterator)| 3.10.1线性表迭代器命名空间]]  |+|''iterator''  |[[:manual:reference:package:standard:main_page#3.11.1 线性表迭代器(list.iterator)| 3.11.1线性表迭代器命名空间]]  |
  
 ^方法  ^描述  ^ ^方法  ^描述  ^
行 410: 行 467:
 |void **reverse**(list)  |将该线性表的所有元素的顺序反转  | |void **reverse**(list)  |将该线性表的所有元素的顺序反转  |
 |void **unique**(list)  |删除连续的重复元素  | |void **unique**(list)  |删除连续的重复元素  |
 +|void **sort**(list, [function] func)  |使用 func 作为比较器对线性表进行排序  |
  
-==== 3.10.1 线性表迭代器(list.iterator) ====+==== 3.11.1 线性表迭代器(list.iterator) ====
  
 ^方法  ^描述  ^ ^方法  ^描述  ^
行 418: 行 476:
 |var **data**([iterator])  |*访问迭代器指向的元素  | |var **data**([iterator])  |*访问迭代器指向的元素  |
  
-===== 3.11 映射(pair) =====+===== 3.12 映射(pair) =====
  
 ^方法  ^描述  ^ ^方法  ^描述  ^
行 427: 行 485:
 \\ \\
  
-===== 3.12 哈希映射(hash_map) =====+===== 3.13 哈希映射(hash_map) =====
  
 ^方法  ^描述  ^ ^方法  ^描述  ^
行 438: 行 496:
 |boolean **exist**(hash_map, var)  |查找是否存在映射  | |boolean **exist**(hash_map, var)  |查找是否存在映射  |
  
-===== 3.13 哈希集合(hash_set) =====+===== 3.14 哈希集合(hash_set) =====
  
 ^方法  ^描述  ^ ^方法  ^描述  ^