aardio初探之基本语法

本文深入解析Aardio编程语言中的数据类型,包括null、boolean、number、string等,并详细介绍字符串处理、特殊字符串定义及各种操作符的使用。此外,还探讨了table类型的运算符重载和元方法,提供了丰富的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文档地址:https://www.hongqiye.com/doc/aardio/#/

数据类型

  • null: 空值
  • boolean: 布尔值
  • number: 数值
  • string: 字符串
  • table: 类似有序字典,但可以没有键,只有值(此时键即为下标索引)
  • function:函数
  • pointer: 普通指针
  • buffer:缓冲区指针
  • cdata: 内核对象
  • fiber:纤程,微软Windows中的命名,和协程类似
  • class:类

查看变量类型: type(obj), 判断两个变量类型是否相同:type.eq(obj1, obj2)

字符串

转义和其他语言基本一样,例如\n, \t等

被/**/包裹的字符串中的换行为\r\n, 单引号中不包含换行,双引号包含的是\n,比如:

str = "我后面是换行符
我前面是换行符"
str = '我后面没有换行符
我前面没有换行符'

特殊字符串

var wstr = 'UTF16字符串'u;
var a = 'A'#;  //表示65,即字符A的ASCII值
var file = $"/test.jpg"; //表示将文件读取为二进制并赋值给file

操作符

基本同其他语言类似,说几个不一样的

  • ++:可将不同类型强制转换后连接成字符串
  • [[]]: 同[], 只在特定条件下与[]不同
  • #:取长度,#'aaaa’的值为4
  • ?:: 三元操作符,与其他语言不同。a?b:c的三元表达式时,如果a为真但是b为false,返回的是c的原值。因为?表示为逻辑与。即a?b和a and b一样
运算符重载

这是针对table类型的运算
加法重载如下:

io.open();
tab = { x=10 ; y=20 };
tab2 = { x=12 ; y=22 }
//c = tab + tab2; //这样肯定会出错,因为 table默认是不能相加的

//创建一个元素,元表中的__add函数重载加运算符。
tab@ = {
    _add = function(b) begin
        return owner.x + b.x
    end;
}

c = tab + tab2; //这时候会调用重载的操作符 tab@._add(tab2)
io.print( c ) //显示22

这里只重载了tab的加法运算就可以进行tab+tab2,不过tab2+tab依旧可以运算。对于某些元方法我们需要重载两个对象。比如判断相等_eq

元方法

  • _weak: 没懂,和弱引用有关
  • _type: 当type()时调用,可以指定自定义类型
  • _defined: 当table.eachName()等,返回对象的预定义已排序键名
  • _keys: table.keys等,返回键列表
  • _startIndex: table.eachIndex等,指定数组的开始下标
  • _get = function(k,ownerCall) {}: 当被[]时,k为键,ownerCall为true时返回函数
  • _set = function(k,v) {}: 使用[]赋值时,k, v为键,值
  • _eq = function(b){}: ==,b为要比较的对象,且b的元方法必须和a一样
  • _le = function(b){}: >=, <=, b为要比较的对象,且b的元方法必须和a一样
  • _lt = function(b){}: <, >, b为要比较的对象,且b的元方法必须和a一样
  • _add = function(b){}: +
  • _sub = function(b){}: -
  • _mul = function(b){}: *
  • _div = function(b){}: /
  • _lshift = function(b){}: <<
  • _rshift = function(b){}: >>
  • _mod = function(b){}: %
  • _pow = function(b){}: **
  • _unm = function(b){}: -
  • _len = function(b){}: #
  • _concat = function(b){}: ++
  • _call = function(b){}: 函数调用()

语句

赋值:
var a = 1;
var a, b, c = 1, 2, 3;
var a, b, c = table.unpack({1, 2, 3})

将table中的变量赋值为null表示删除这个元素

条件判断

if elseif else
select case

循环

while

  1. while(条件判断语句) {}
  2. while(var 初始化循环变量列表;判断条件前执行语句;条件判断语句){}

do while
do{} while(条件判断语句);
for
for( 计数器变量= 初始数值; 最大数值; 步进数值){} //步进数值省略默认为1
for in
同python,可以遍历table和迭代器
break
可以指定循环层数,比如break 2;表示上上层循环,不指定则默认1即当前循环,也可以指定标号来break 标号;结束指定循环
例如:

io.open(); //打开控制台

while( true ){ 循环体2: //可以在循环体的开始指定一个标号
    io.print("循环体2开始" );

    while( true )begin
         io.print("循环体1开始" );

        break 2;//中断上层循环
        break 循环体2; //这句的作用与上面的break作用是一样的

        io.print("循环体1结束" );

    end;

    io.print("循环体2结束" );
}

execute("pause") //按任意键继续
io.close();//关闭控制台

continue

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值