首页 > 其他分享 >aardio教程二) 进阶语法

aardio教程二) 进阶语法

时间:2024-03-17 22:34:48浏览次数:13  
标签:教程 console 进阶 对象 aardio 123 obj table 成员

表(table)

aardio中除了基础数据类型外,其他的复合对象都是table(例如类和名字空间等)。table可以用来存放aardio的任何对象,包括另一个table。

在其他语言中的字典、列表、数组、集合映射等,在aardio中都使用table来实现。

创建字典

import console;

var tab = {
    a = 123;
    str = "字符串";
    [123] = "不符合变量命名规则的键应放在下标内。";
    ["键 名"] = "不符合变量命名规则的键应放在下标内。";
    键名 = {
        test = "表也可以包含表";
    }
}
// 新版也可以使用类json语法定义
var tab = {
    "a": 123,
    "str": "字符串",
    //123: "不符合变量命名规则的键应放在下标内。" // 这样定义键不能是数值类型
    "键名": {"test":"表也可以包含表"}
}
tab.a = 456;
tab["str"] = "aaaa" ;
// 赋值为null等同于删除该键
tab.键名 = null;
// 遍历
for k,v in tab{
    console.dump(k,v);
}
console.pause();

创建数组

var array = {1;2;3;"a"};
// 遍历
for(i=1;#array;1){
    console.dump(i, array[ i ]);
}

数组和字典可以混用

var t = {
    1;
    2;
    a=2;
}
// #只能获取到数组长度,也就是2
console.log(#t)
// 获取表长度, 3
console.log(table.count(t))

使用class关键字定义类。类可以动态创建数据结构相同的table对象

定义类

//定义类
class 类名字{

 //构造函数可以省略
 ctor( 构造参数列表 ){
 	//构造函数代码
 }

 类属性 = "属性值";
 
 类方法 = function(参数){
 }
 
}

和定义一个table的语法基本一样,只是类可以创建出对象

var 对象 = 类名字();
io.print(对象.类属性)
对象.类方法();

类的名字空间

定义类时,默认会创建一个同名的名字空间。赋值给名字空间的变量就是类的公用静态成员

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

//定义一个类
class cls{
    a = 123;
}  
//每一个类拥有独立的名字空间,名字空间中的变量也就是类的公用静态成员。
cls.A = "类的静态成员A";

c = cls(); //创建新对象

io.print( "c.a" , c.a ) //显示123
io.print( "cls.A" , cls.A ) //显示"类的静态成员A";

在库代码里可以经常看到,定义类的时候一般会定义一个同名的名字空间,用于存放一些静态函数或变量

class base{
    a = 123;
    b = 456;
    c = 789
}
namespace base{
    static = 123; //类的静态成员
}

this对象

也就是Python的self,表示当前对象

owner对象

这个解释起来比较麻烦,但理解了就很简单,举个例子:

class cls{ 

	func = function(){
		//类有自已的名字空间,访问全局对象要加上..前缀
		
		..io.print("owner", owner  )
		..io.print("this", this )
		..io.print("owner == this", owner == this  ) 
	}
	
}

//创建对象
obj = cls(); 

//打开控制台
io.open()
 
//调用对象方法
obj.func(); //默认table与owner是同一个对象 

func = obj.func;

func();//这里owner为null空值,而this对象没有改变

当一个table对象调用成员函数时,默认会传递一个owner对象给函数。而在类创建的对象成员函数里,owner对象与this对象是指向同一个对象。

this对象与owner对象的区别在于: this是类内部指向当前创建对象的指针,this指针不会因为函数的table前缀改变而改变。而owner对象是会根据函数调用时函数名前缀的table对象而相应改变

构造函数

ctor函数就是类的构造函数,等同于__init__,只是参数没有self

//定义类
class cls{
    
    //使用ctor关键字定义构造函数
    ctor( a,b ){
        this.a = a;
        this.b = b;
    }
 
    c = "this.c";
    d = "this.d";
}
 
//调用类的构造函数创建对象
var obj = cls(123,456);
 
import console;
console.log( obj.a, obj.b )

console.pause();

类的直接继承

//创建一个基类 
class base{
    a = 123;
    b = 456;
    c = 789
}
namespace base{
    static = 123; //类的静态成员
}

class inheritance{
    
    // 构造函数,三个点表示可变参数,类似Python的*args
    ctor(...){ 
        // 在类函数里访问其他名字空间前面都需要加上.., 内核库也要,比如..string.format
        this = ..base(...); //调用基类构造对象原型。
    };
    
    c = "覆盖基类成员";
    d = "子类的新成员";
}

import console;
var obj = inheritance();//从子类创建对象

//输出对象的所有成员(包括直接继承的基类成员)
for(k,v in obj){
    console.log(k,v);
}

console.pause();

类的间接继承

class base{
   a = 123;
   b = 456;
   c = 789
}

class inheritance{ 
    c = "覆盖基类成员";
    d = "子类的新成员";
    // @表示类的元表,名称是随意的
    @_prototype; 
}

// 在类的名字空间内指定静态共享成员 _prototype
// 可以在元表中定义相应的元方法,来改变类的一些行为,比如_get是访问类属性时触发
inheritance._prototype =  { _get = ..base() };
    
import console;
var obj = inheritance();//从子类创建对象

//与类的直接继承不同
//遍历只能输出子类的所有对象,(不会遍历元表中原型对象的成员)
for(k,v in obj){
    console.log(k,v);
}

//通过元方法继承仅在使用成员操作符时生效
console.log("访问base类的成员", obj.a );

console.pause();

类的私有成员

用var定义的成员变量,作用域只在类里面,所以外部无法访问

类的只读成员

用下划线开头的变量为类的只读成员,无法修改它。也可以通过元表来定义只读成员,元表和元方法的时候再具体说

本文由博客一文多发平台 OpenWrite 发布!

标签:教程,console,进阶,对象,aardio,123,obj,table,成员
From: https://www.cnblogs.com/kanadeblisst/p/18079323

相关文章

  • 最详细的Keycloak教程(建议收藏):Keycloak实现手机号、验证码登陆——(三)基于springboot&k
    在前面两节分别介绍了Keycloak的下载与使用和keycloak与springboot的集成。接下来第三节让我们一步步的去完成一个简单的前后端分离项目,并且可以扩展实现sso。一、简介本文将介绍如何使用SpringBoot、Keycloak和Vue构建一个具有前后端分离架构的Web应用程序。通过将前......
  • 葫芦娃助手教程
    #简介葫芦娃助手,支持一键批量预约,批量查询,提取token等功能,支持定时执行任务。节省玩家时间#运行环境Windows系统#软件下载地址GitHub-Explosbot/Hlwzs:葫芦娃助手,葫芦娃一条龙工具.支持葫芦娃批量预约,葫芦娃批量中签查询,葫芦娃token提取,A1662数据登录,批量注册等......
  • Mimikatz使用教程
    介绍Mimikatz是一款开源的Windows安全工具,它被作者定义为“用来学习C语言和做一些Windows安全性实验的工具”。Mimikatz工具在Windows操作系统中运行时,可以从内存中提取出操作系统的明文密码、哈希、PIN码和Kerberos票据等,并支持哈希传递(pass-the-hash)、票据传递(pass-the-tick......
  • [nodejs] NodeJs/NPM入门教程
    0序nodejs是运行在服务器端的js,常用于前端工程师在本地电脑、或生产环境部署调试或运行前端工程。回想起来,上次使用nodejs,还在5年前做大学毕业设计时,基于前后端分离的实践(那时,业界正在兴起前后端分离的浪潮。当然了,现在的web工程,前后端分离已是默认的技术选择了)这次重......
  • C语言指针(适合C语言进阶者):一道题带你深入理解数组与指针的关系
    ......
  • 微信小程序云开发教程——墨刀原型工具入门(表单组件)
      引言作为一个小白,小北要怎么在短时间内快速学会微信小程序原型设计?“时间紧,任务重”,这意味着学习时必须把握微信小程序原型设计中的重点、难点,而非面面俱到。要在短时间内理解、掌握一个工具的使用,最有效的方式莫过于临摹:看实例视频教程,并跟着教程在实例素材上操作。......
  • 【奶奶看了都会】用 AI做猫咪剧情短片保姆级教程
    大家这段时间在刷短视频的时候,是不是经常会刷到那种猫咪剧情短片,配合喵喵喵......的魔性背景音乐,让人看了非常上头。最近这类视频在抖音、视频号、小红书上非常火,今天小卷就来教大家如何制作。先看视频效果:喵喵与卖火柴的小女孩1.GPT4账号准备我们用到的AI生图工具是ChatGPT4......
  • HTML进阶版(表单标签、语义化标签、字符实体)
    雷迪斯andthe乡亲们 欢迎你们来到奇幻的编程世界  上一篇我们学习了(列表标签、表格标签)让我来回顾一下吧!列表标签无序列表最常用,有序列表偶尔用,自定义列表底部导航用表格标签①表格基本标签:table>tr>td②表格标题和表头单元格标签:table> caption......
  • Angular 17+ 高级教程 – Animation
    前言            目录上一篇 Angular17+高级教程–HttpClient下一篇 Angular17+高级教程–ReactiveForms想查看目录,请移步 Angular17+高级教程–目录......
  • python自动化——Requests——教程截图笔记复习
                                                                           123123......