目录

Covariant Script 标准包

标准包是内置于 CovScript 解释器中的各类功能和函数,是标准的组成部分之一

3.1 全局作用域(global)


单例对象 描述
context 解释器上下文环境


类型 描述
float 数值类型浮点实现
integer 数值类型整数实现
boolean 逻辑类型
pointer 指针类型


方法 描述
var clone(var) 复制一个变量并返回
var move(var) 将变量标记为右值
void swap(var, var) 交换两个变量的值
[range] range(number stop) 生成一个步长为 1 的一个区间[0, stop)
[range] range(number start, number stop) 生成一个步长为 step 默认为 1 的区间 [start, stop)
[range] range(number start, number stop, number step = 1) 生成一个步长为 step 的区间 [start, stop)
number to_integer(var) 将一个变量转换为整数
string to_string(var) 将一个变量转换为字符串
string type(var) 获取一个变量的类型名称

注意,range 函数生成的区间,仅可用于 foreach 遍历操作,如: foreach num in range(10) do system.out.println(num)



3.2 异常(exception)

异常域为所有异常提供了统一的方法。一般来说,不同类型的异常来自不同的命名空间(例如runtime.exception),但他们的设计大相径庭。

代码 功能
string what([exception]) 获取异常详情

注意:目前只有 runtime 命名空间下的 exception 可用。



3.3 输入输出流(iostream)

方法 描述
[istream] ifstream(string path) 新建一个输入文件流(openmode.in)
[ostream] ofstream(string path) 新建一个输出文件流(openmode.out)
[istream/ostream] fstream(string path, [openmode] mode) 新建一个文件流,其具体类型取决于打开方式
void setprecision(number) 设置输出精度(to_string 的精度)

3.3.1 寻位方向(seekdir)

单例对象 描述
start 流的开始
finish 流的结尾
present 当前位置

3.3.2 打开方式(open_mode)

代码 功能
in 为读打开(输入流)
bin_in 为读打开(输入流,二进制)
out 为写打开(清空内容, 输出流)
bin_out 为写打开(清空内容, 输出流, 二进制)
app 为写打开(追加内容, 输出流)
bin_app 为写打开(追加内容, 输出流, 二进制)

3.3.3 输入流(istream)

方法 描述
char get([istream]) 从流中读取一个字符
char peek([istream]) 从流中预读取下一个字符(读取但不删除)
void unget([istream]) 向流中放回一个字符
string getline([istream]) 从流中读取一行字符串
number tell([istream]) 获取流位置指示器
void seek([istream], number pos) 设置流位置
void seek_from([istream], [seekdir], number offset) 设置相对寻位方向的流位置
boolean good([istream]) 检查是否有错误
boolean eof([istream]) 检查是否到达文件流结尾
var input([istream]) 从流中获取输入(格式化)
void ignore([istream]) 忽略?流中当前及以前行所有内容

3.3.4 输出流(ostream)

代码 功能
void put([ostream], char) 向流中插入字符
number tell([ostream]) 获取流位置指示器
void seek([ostream], number pos) 设置流位置
void seek_from([ostream], [seekdir], number offset) 设置相对寻位方向的流位置
void flush([ostream])与底层存储设备同步
boolean good([ostream]) 流是否正常打开,检查是否有错误
void print([ostream], var) 向流中输出内容,仅可输出支持 to_string 的类型(不换行)
void println([ostream], var) 向流中输出内容,仅可输出支持 to_string 的类型(换行)

3.3.5 字符缓冲区类型(char_buff)

代码 功能
[istream] get_istream([char_buff]) 转换至输入流
[ostream] get_ostream([char_buff]) 转换至输出流
string get_string([char_buff]) 将实际缓冲区转换为字符串


3.4 系统(system)


选项代码 描述
in 标准输入流
out 标准输出流


方法 描述
void exit(number) 清理资源并退出进程,在协程中无效
boolean is_platform_darwin() 判断是否为 macOS 平台
boolean is_platform_linux() 判定是否为 Linux 平台
boolean is_platform_unix() 判断是否为 Unix 兼容平台
boolean is_platform_windows() 判定是否为 Windows 平台
number run(string) 在系统环境中运行一条指令,并返回错误码
string getenv(string) 获取环境变量,当未找到时抛出异常

3.4.1 控制台(system.console)

方法 描述
void clrscr() 清屏
void echo(boolean) 设置光标可见性
char getch() 从键盘获取输入的一个字符
void gotoxy(number x, number y) 移动光标至x,y
bool kbhit() 判断是否有键盘输入
number terminal_width() 获取控制台宽度(单位:像素)
number terminal_height() 获取控制台高度(单位:像素)

3.4.2 文件(system.file)

方法 描述
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
number ctime(string path) 返回文件的创建时间 (Unix Time)
number mtime(string path) 返回文件的修改时间 (Unix Time)
boolean can_read(string path) 判定一个路径是否具有可读权限
boolean can_write(string path) 判定一个路径是否具有可写权限
boolean can_execute(string path) 判定一个文件是否为可执行文件

3.4.3 路径(system.path)


单例对象与方法 描述
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) 判定一个路径是否为目录

注意:更改路径权限这里,权限使用特定格式的字符串指定,格式如下:
字符串可以分为三组字符,每一组有三个,每个字符都代表不同的权限,分别为读取(r)写入(w)执行(x),例如(rwxr-xr--)

  • 第一组字符(1-3)表示文件所有者的权限,这里表示所有者拥有读取(r)写入(w)执行(x)的权限
  • 第二组字符(4-6)表示文件所属用户组的权限,这里表示该组拥有读取(r)执行(x)的权限,但没有写入权限
  • 第三组字符(7-9)表示所有其他用户的权限,这里表示其他用户只能读取(r)文件

3.4.3.1 路径类型(system.path.type)

选项代码 描述
unknown 未知
fifo 管道
sock 套接字
chr 字符设备
dir 文件夹
blk 块设备
reg 常规
lnk 链接

3.4.3.2 路径信息(system.path.info)

代码 功能
string name([path_info]) 获取路径名
[path_type] type([path_info]) 获取路径类型


3.5 运行时(runtime)

运行时命名空间

命名空间 描述
time_type 3.5.1 时间类型命名空间
单例对象 描述
number std_version 标准版本号
方法 描述
void info() 从标准输出流输出解释器版本信息
[hash_value] hash(var) 计算一个变量的哈希值
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(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_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)

方法 描述
number sec([time_type]) *分后之秒,范围是[0, 60*]
number min([time_type]) *时后之分,范围是[0, 59*]
number hour([time_type]) *自午夜起之时,范围是[0, 23*]
number wday([time_type]) *自星期日起之日,范围是[0, 6*]
number mday([time_type]) *月之日,范围是[1, 31*]
number yday([time_type]) *自 1 月 1 日起之日,范围是[0, 365*]
number mon([time_type]) *自一月起之月,范围是[0, 11*]
number year([time_type]) *自 1900 起之年
boolean is_dst([time_type]) *是否为夏令时
number unixtime([time_type]) *转换为 Unix Time


3.6 数学(math)

命名空间 描述
constants 3.6.1常量命名空间
方法 描述
number abs(number) 绝对值
number ln(number) 以 e 为底的对数
number log10(number) 以 10 为底的对数
number log(number a, number b) 以 a 为底 b 的对数
number sin(number) 正弦值(弧度)
number cos(number) 余弦值(弧度)
number tan(number) 正切值(弧度)
number asin(number) 反正弦值(弧度)
number acos(number) 反余弦值(弧度)
number atan(number) 反正切值(弧度)
number sqrt(number) 开方
number root(number a, number b) a 的 b 次方根
number pow(number a, number b) a 的 b 次方
number min(number a, number b) a 和 b 的最小值
number max(number a, number b) a 和 b 的最大值
number rand(number, number) 获取区间内的伪随机数
number randint(number, number) 获取区间内的伪随机整数

3.6.1 常量(math.constants)

单例对象 描述
number max 数值类型浮点实现最大值
number min 数值类型浮点实现最小值
number integer_max 数值类型整数实现最大值
number integer_min 数值类型整数实现最小值
number float_max 数值类型浮点实现最大值
number float_min 数值类型浮点实现最小值
number inf 数值类型正无穷
number nan 数值类型无意义
number pi 圆周率
number e 自然底数


3.7 字符(char)

方法 描述
boolean isalnum(char) 检查字符是否是字母或数字
boolean isalpha(char) 检查字符是否是字母
boolean islower(char) 检查字符是否是小写字母
boolean isupper(char) 检查字符是否是大写字母
boolean isdigit(char) 检查字符是否是数字
boolean iscntrl(char) 检查字符是否是控制字符
boolean isgraph(char) 检查字符是否是图形字符
boolean isspace(char) 检查字符是否是空白字符
boolean isblank(char) 检查字符是否是空格或 tab
boolean isprint(char) 检查字符是否是打印字符
boolean ispunct(char) 检查字符是否是标点符号
char tolower(char) 将字符转换为小写
char toupper(char) 将字符转换为大写
char from_ascii(number) 将 ascii 码转换为字符


3.8 数值(number)

方法 描述
boolean is_integer(number) 返回数值实现是否为整数
boolean is_float(number) 返回数值实现是否为浮点
integer ntoi(number) 将数值转换为整数实现
float ntof(number) 将数值转换为浮点实现


3.9 字符串(string)

方法 描述
string append(string, var) 在尾部追加内容
void assign(string, number index,char ch) 在字符串 index 处给字符赋值
void clear(string) 清空
string cut(string, number count) 从尾部删除指定长度的字符串
boolean empty(string) 检查字符串是否为空
number find(string, string target, number begin) 返回从指定位置开始匹配到的第一个子串下标
string insert(string, number index, var) 在指定位置处插入内容
string replace(string, number begin, number count, var) 将从指定位置开始的指定个数字符替换
number rfind(string, string target, number begin) 从指定位置开始从右向左查找一段字符串
number size(string) *获取字符个数
array split(string,array) 使用指定的字符集合分割字符串,返回由 string 组成的 array
string substr(string, number begin, number count) 返回从指定位置截取指定长度的字符串
number to_number(string) 将字符串转换为数值
string tolower(string) 将字符串转换为小写
string toupper(string) 将字符串转换为大写


3.10 数组(array)

命名空间 描述
iterator 3.10.1数组迭代器命名空间
方法 描述
var at(array, number) 访问指定的元素,同时进行越界检查
var front(array) *访问第一个元素
var back(array) *访问最后一个元素
[iterator] begin(array) *获取指向容器第一个元素的迭代器
[iterator] end(array) *获取指向容器尾端的迭代器
boolean empty(array) 检查容器是否为空
number size(array) *获取容纳的元素数
void clear(array) 删除全部内容
[iterator] insert(array, [iterator], var) 插入元素,插入到迭代器指向的元素之前,返回指向插入元素的迭代器
[iterator] erase(array, [iterator]) 删除元素,返回指向要删除的元素的下一个元素的迭代器
void push_front(array, var) 在容器的开始处插入新元素
var pop_front(array) 删除第一个元素并返回
void push_back(array, var) 将元素添加到容器末尾
var pop_back(array) 删除最后一个元素并返回
var sort(array, [function] func) 使用 func 作为比较器对数组进行排序
list to_list(array) 将数组转换为链表
hash_map to_hash_map(array) 将数组转换为哈希映射,要求数组中元素必须都是映射
hash_set to_hash_set(array) 将数组转换为哈希集合


3.10.1 数组迭代器(array.iterator)

方法 描述
[iterator] next([iterator]) 向前移动并返回迭代器
[iterator] next_n([iterator], step) 同 next,向前移动 step 个单位并返回
[iterator] prev([iterator]) 向后移动并返回迭代器
[iterator] prev_n([iterator], step) 同 prev,向后移动 step 个单位并返回
var data([iterator]) *访问迭代器指向的元素


3.11 线性表(list)

命名空间 描述
iterator 3.11.1线性表迭代器命名空间
方法 描述
var front(list) *访问第一个元素
var back(list) *访问最后一个元素
[iterator] begin(list) *获取指向容器第一个元素的迭代器
[iterator] end(list) *获取指向容器尾端的迭代器
boolean empty(list) 检查容器是否为空
number size(list) *获取容纳的元素数
void clear(list) 删除全部内容
[iterator] insert(list, [iterator], var) 插入元素, 插入到迭代器指向的元素之前,返回指向插入的元素的迭代器
[iterator] erase(list, [iterator]) 删除元素,返回指向要删除的元素的下一个元素的迭代器
void push_front(list, var) 在容器的开始处插入新元素
var pop_front(list) 删除并返回第一个元素
void push_back(list, var) 将元素添加到容器末尾
var pop_back(list) 删除并返回最后一个元素
void remove(list, var) 删除所有与指定变量相等的元素
void reverse(list) 将该线性表的所有元素的顺序反转
void unique(list) 删除连续的重复元素
void sort(list, [function] func) 使用 func 作为比较器对线性表进行排序

3.11.1 线性表迭代器(list.iterator)

方法 描述
[iterator] next([iterator]) 向前移动迭代器
[iterator] prev([iterator]) 向后移动迭代器
var data([iterator]) *访问迭代器指向的元素

3.12 映射(pair)

方法 描述
var first(pair) *获取第一个元素
var second(pair) *获取第二个元素


3.13 哈希映射(hash_map)

方法 描述
boolean empty(hash_map) 检查容器是否为空
number size(hash_map) *获取容纳的元素数
void clear(hash_map) 删除全部内容
void insert(hash_map, var, var) 插入一个映射
void erase(hash_map, var) 删除键对应的映射
var at(hash_map, var) 访问指定的元素,同时进行越界检查
boolean exist(hash_map, var) 查找是否存在映射

3.14 哈希集合(hash_set)

方法 描述
boolean empty(hash_set) 检查容器是否为空
number size(hash_set) *获取容纳的元素数
void clear(hash_set) 删除全部内容
void insert(hash_map, var, var) 插入一个元素
void erase(hash_set, var) 删除元素
boolean exist(hash_set, var) 查找是否存在元素
hash_set merge(hash_set, hash_set)返回两个集合的并集(不能使用 this 作为参数)
hash_set subtract(hash_set, hash_set)返回两个集合的差集(不能使用 this 作为参数)
hash_set intersect(hash_set, hash_set)返回两个集合的交集(不能使用 this 作为参数)