青语言使用文档

模块化

创建于 2023-04-23 / 最近更新于 2023-04-25 / 1924
字体: [默认] [大] [更大]

前面我的示例都是一些比较简短的代码,当我们需要实现比较复杂的逻辑时,我们就需要编写较长的代码,并把代码保存到文件中。

更进一步,如果我们要实现的逻辑非常复杂,代码行数很多,比如上万行,那么这个时候把这么多的代码放到同一个文件里,就不利于管理。所以我们还需要从文件的角度,实现代码的模块化。

包含

青语言中,如果我们希望在代码中包含另一个代码文件的代码,那么可以使用内置的原生函数@包含
@原生函数-包含{参数-1字符串,可选参数2-逻辑,返回任意|对象;执行参数1对应文件中的代码,如果参数2为真,则会在一个对象语 境中执行代码,并返回这个对象}

假设我们有一个青语言代码文件模块1.q,那么我们可以这样引用它:

@包含、“模块1.q”

@包含函数的第一个参数是文件的路径,可以是相对路径,也可以是绝对路径,还可以是网址。
如果只传入一个参数,那么会直接把对应的文件内容作为代码,在当前语境中执行。
如果你不希望这个文件中的代码对现有的语境造成影响,那么可以传入第二个参数

#模块1  = @包含【“模块1.q”,真】

如果存在第二个参数,且第二个参数的值为真,那么会创建一个对象,且这个对象的父语境直接为库语境,然后在这个对象的语境中执行包含的文件中的代码,然后返回这个对象。之后我们就可以按对象的方式来使用这个模块了。

引入

青语言中模块化的另一种形式是使用全局的模块,通过内置函数@引入来实现
@原生函数-引入{参数1-字符串,返回模块;将参数1对应的代码文件作为模块引入到当前代码中,模块在第一次取值时会转换为对象, 模块是全局唯一的}
这种方式和@包含类似,会执行另一个文件的代码。
不同的是,@引入会创建全局唯一的模块,并在第一个调用时创建一个对象。
如果多次调用@包含时第一个参数相同,且传入的第二个参数为真,那么每次都会创建新的对象。但如果多次调用@引入,且模块路径相同,那么只会有1个模块对象。

#模块1  = @引入、“模块1.q”

同样@引入的模块路径可以是文件的相对路径或绝对路径,也可以是网址。引入完成后,同样以对象的方式来使用这个模块。

0 人点赞过