aardio教程二) 进阶语法

这篇具有很好参考价值的文章主要介绍了aardio教程二) 进阶语法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

表(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 发布!文章来源地址https://www.toymoban.com/news/detail-841028.html

到了这里,关于aardio教程二) 进阶语法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • aardio教程三) 元表、元方法

    还有个迭代器,基础语法基本已经说完了,后面想到啥再补充,之后的教程会从以下方面来讲: 基础库的使用,比如string、table等 基础控件的使用,比如listview、tab等 aardio和Python交互,比如给Python写个界面 自带的范例程序 我写的一些小程序 当然,我的理解也是很基础的,特

    2024年03月20日
    浏览(29)
  • aardio教程) 搭建自己的扩展库仓库

    aardio中有些经常使用的库,换个项目总需要复制一下,还不便于修改。虽然可以直接把它放到 aardiolib 目录下,也是不便于共享给其他人使用。 最近偶然翻到编辑器里的 工具 - 开发环境 - 扩展库发布工具 ,就想着可以像官方一样,发布自己的扩展库,也便于分享给大家使用

    2024年03月27日
    浏览(22)
  • 【CMake 入门与进阶(3)】 CMakeLists.txt 语法规则基础及部分常用指令(附使用代码)

            在上两篇中,笔者通过几个简单地示例向大家演示了 cmake 的使用方法,由此可知,cmake 的使用方法其实还是非常简单的,重点在于编写 CMakeLists.txt,CMakeLists.txt 的语法规则也简单,并没有 Makefile 的语法规则那么复杂难以理解!本文我们来学习CMakeLists.txt 的语法规

    2024年02月11日
    浏览(31)
  • TypeScript教程(二)基础语法与基础类型

    TypeScript由以下几个部分组成 1.模块 2.函数 3.变量 4.语句和表达式 5.注释 示例: Runoob.ts 文件代码: 以上代码首先通过  tsc  命令编译: Runoob.js 文件代码:  最后我们使用 node 命令来执行该 js 代码。 tsc 常用编译参数如下表所示: 序号 编译参数说明 1. --help 显示帮助信息

    2024年02月12日
    浏览(30)
  • VUE2教程-基础-模板语法

    Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML,所以能被遵循规范的浏览器和 HTML 解析器解析。 在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,Vue 能够智能地计算出最少需要

    2024年02月17日
    浏览(37)
  • Python入门教程 | Python 基础语法

    第一个字符必须是字母表中字母或下划线 _ 。 标识符的其他的部分由字母、数字和下划线组成。 标识符对大小写敏感。 在 Python 3中,可以用中文作为变量名,非 ASCII 标识符也是允许的了。默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 在Python中

    2024年02月11日
    浏览(37)
  • jupyter使用教程及python语法基础

    上回说到搭建jupyter环境,今天的文章主要就是熟悉jupyter上的基本操作,以及python的一些基础语法。 1、熟悉jupyter界面使用方法 通过命令行进入jupyter后,选择python3。 进去之后就是如下界面,要熟悉以下操作。当在光标所在行输入,要ctrl+回车,执行命令。 此时如果遇到程序

    2024年02月06日
    浏览(29)
  • Blazor简单教程(1.1):Razor基础语法

    Blazor最重要的是Razor组件和cshtml页面。两个最大的区别就是cshtml是完整的html,Razor是不完整的html 微软Razor 语法官方文档 我的Blazor基础语法个人总结 C# Blazor 学习笔记(12):css样式设置 C#小轮子:Visual Studio自动编译Sass文件 Components:组件 Controller:控制器/API Layout:布局 Models:实

    2024年02月13日
    浏览(45)
  • Python以及基础语法保姆级教程(超详细)

    Python 是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 1.1 Python创始人 Python的创始人为荷兰人吉多·范罗苏姆(Guido van Rossum) 1.2 Python发展及经过 Python语言诞生于20世纪90年代初是由 Guido van Rossum 在圣诞节期间开始

    2024年02月21日
    浏览(34)
  • rust教程 第二章 —— rust基础语法详解

    首先要讲解的便是变量,如果你有其它语言基础,相信还是比较好理解的 我们的电脑中,很重要的一个性能指标便是内存大小,而所有的程序便是运行在内存中的: 而变量,就是在这个内存中,申请一块属于自己可以调度的内存块,有了这块内存,我们就能用它来计算、存

    2023年04月25日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包