下面引自Qlang的Github页面,

include

在 qlang 中,一个 .ql 文件可以通过 include 文法来将另一个 .ql 的内容包含进来。所谓包含,其实际的能力类似于将代码拷贝粘贴过来。例如,在某个目录下有 a.ql 和 b.ql 两个文件。

其中 a.ql 内容如下:

println("in script A")foo = fn() {println("in func foo:", a, b)
}

其中 b.ql 内容如下:

a = 1
b = 2include "a.ql"println("in script B")
foo()

如果 include 语句的文件名不是以 .ql 为后缀,那么 qlang 会认为这是一个目录名,并为其补上 “/main.ql” 后缀。也就是说:

include "foo/bar.v1"

等价于:

include "foo/bar.v1/main.ql"

模块及 import

在 qlang 中,模块(module)是一个目录,该目录下要求有一个名为 main.ql 的文件。模块中的标识(ident)默认都是私有的。想要导出一个标识(ident),需要用 export 语法。例如:

a = 1
b = 2println("in script A")f = fn() {println("in func foo:", a, b)
}export a, f

这个模块导出了两个标识(ident):整型变量 a 和 函数 f。

要引用这个模块,我们需要用 import 文法:

import "foo/bar.v1"
import "foo/bar.v1" as bar2bar.a = 100 // 将 bar.a 值设置为 100
println(bar.a, bar2.a) // bar.a, bar2.a 的值现在都是 100bar.f()

qlang 会在环境变量 QLANG_PATH 指示的目录列表中查找 foo/bar.v1/main.ql 文件。如个没有设置环境变量 QLANG_PATH,则会在 ~/qlang 目录中查找。

将一个模块 import 多次并不会出现什么问题,事实上第二次导入不会发生什么,只是增加了一个别名。

include vs. import

include 是拷贝粘贴,比较适合用于模块内的内容组织。比如一个模块比较复杂,全部写在 main.ql 文件中过于冗长,则可以用 include 语句分解到多个文件中。include 不会通过 QLANG_PATH 来找文件,它永远基于 __dir__(即 include 代码所在脚本的目录) 来定位文件。

import 是模块引用,适合用于作为业务分解的主要方式。import 基于 QLANG_PATH 这个环境变量搜寻被引用的模块,而不是基于 __dir__

Gox语言中引用外部代码或模块-GX15相关推荐

  1. Gox语言中使用Sciter库进行GUI图形界面编程-GX23.1

    Sciter是非常优秀的跨平台GUI图形界面编程库,只需附带一个动态链接库文件,就可以实现基于HTML/CSS/TiScript的图形界面,并且已经经过很多公司和商用产品的实际检验,稳定可靠.我们常见 ...

  2. Gox语言中的基本数据类型及其转换-GX5.1

    Gox语言默认选用Qlang语法引擎,Qlang脚本语言又是基于Go语言(Golang)做了一定的改进,数据类型基本继承自Go语言,数据的赋值等操作也基本类似但略加改进和变化.一个主要的不同是,Gox ...

  3. Gox语言中的结构类型-GX10.1

    Gox语言中,结构类型(struct)其实并不是很常用,因为Gox语言本身就是动态类型的语言,一般的类似结构体的数据直接用数组或者映射类型就可以了,里面的数据项可以是任意类型,包括嵌套复合类型.对映射 ...

  4. Gox语言中进行屏幕截图并显示在Sciter图形界面中-GX38.2

    本例承接GX38.1一文中的例子,加了一些改进,在进行界面截图后,将图片展示在用Sciter包编写的图形界面上. 代码如下: // 设置github.com/kbinani/screenshot包的简 ...

  5. ​Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数

    ​Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数 7.4.4  为外部参数设置默认值 开发者也可以对外部参数设置默认值.这时,调用的时候,也可以省略参数传递本文选自Swift ...

  6. Gox语言中的循环与分支-GX14

    Gox语言中实现的循环与分支都是比较简单,也比较好理解的.唯一需要注意的是else if需要写作"elif",其他的基本与Go语言类似. 下面引自Qlang的Github页面, f ...

  7. Gox语言中如何处理XML-GX20

    Gox语言中集成了Go语言的第三方库etree,因此已经内置XML文档的处理功能.etree更详细的文档可参考这里. 我们直接来看下面这个例子: etree = github_beevik_etree ...

  8. python中字符串怎么引用_Python:字符串中引用外部变量的3种方法

    方法一: username=input('username:') age=input('age:') job=input('job:') salary=input('salary') info1='' ...

  9. Angular7中引用外部JS文件

    Angular7中引用外部JS文件,步骤如下: 1. 将引入的js文件放到项目的src/assets下 2. 在angular.json文件中找到scripts项并配置js文件的相对路径 3. 在sr ...

最新文章

  1. mnn python例子
  2. 什么是域名服务器(DNS)
  3. 大气自适应会员中心帝国cms模板
  4. 51NOD 1244 莫比乌斯函数之和
  5. 第3章第1讲算法与流程图
  6. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_01-项目概述-功能构架-项目背景...
  7. Python中Queue.get()方法阻塞,怎么办?
  8. Testbench编写常用语法和必备知识
  9. taptap评论爬虫
  10. mysql修改字段的名称类型_MySQL修改字段名和字段数据类型
  11. 使用JSONRPC操作附带token(secret)的aria2
  12. android x86 驱动精灵,手机驱动精灵软件下载(5个步骤即可解决)
  13. UTRAN Iub接口介绍
  14. 通过websocket抓取斗鱼弹幕和礼物消息
  15. 仿网易云音乐的滑动冲突处理效果
  16. mysql整数转为2位小数_SQL整数转换成小数
  17. 进入Google十大排名的10个步骤
  18. netty 简单demo
  19. MT6735文件路径记录
  20. 150条经典装逼语录,都是经典

热门文章

  1. 错误 ‘av_free_packet‘: 被声明为已否决 FFmpeg
  2. APP内存泄漏怎么办,我教你
  3. 数据可视化设计经验分享:10分钟做出炫酷数据大屏
  4. 工业自动化程序计算机英语,工业自动化常用英语
  5. 论文投稿指南——中文核心期刊推荐(综合性经济科学 2)
  6. 刷机一直请求shsh_爱思助手刷机过程里提示请求SHSH失败的处理方法
  7. android版本隐藏彩蛋养猫,安卓养猫彩蛋游戏下载-安卓养猫彩蛋 安卓版v0.4.5-PC6手游网...
  8. BMW BENZ AUDI 宝马,奔驰,奥迪维修标准工时,从KSD,WIS, ELSA 中提取。
  9. 测试边界值(上点、内点、离点)
  10. 个人免签支付对接步骤教程