这篇文章将为大家详细讲解有关如何实现Drag语言设计 ,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
drag虚拟机,类似python虚拟机、java虚拟机。
当类实现dynamic接口时,那么这个类支持动态添加属性和添加方法的操作。否则,这个类会在编译时检查操作是否合法。
类似去掉java的原生类型。
Object DynamicBooleanByteIntegerLongFloatDoubleString Map List
区分Float和Double采用数字后面使用_d或_f 区分Integer和Long采用数字后面使用_i或_l
Integer a=10;也可以a=10; 不定义引用类型时,默认是Object类型。
public class A{ void printString(){ print("str"); } }public class A void printString() print("str");
没有swith,没有while
//普通版if(){}else if(){}else{}//简写版if(){}ef(){}el{}
for(Boolean)//类似whilefor(Var;Boolean;Increment)//正常的forfor(Var in Iterator)//类似python
goto只能在方法内使用,且只能往后goto到一个标记处。 类似java的break 标签,但不限于在循环内使用。
[String] ss=["str1","str2"];for(s in ss) if(s=="str2") goto A print("run...");//这句代码会被跳过:A//跳到这里
String s="ss sssss ";
同java,但单行支持#
同java,但不能使用$
默认10进制 2进制:数字开头使用28进制:数字开头使用816进制:数字开头使用16_ 以此类推。
public static String,Integer getInfo() return "zs",10;public static main(List s) String name,Integer age=getInfo();
类似java的list
数组的定义(泛型写法)List<String> array=new List();//如果在构造方法new List(Integer);传入参数则可以固定数组长度List<String> array=new List<String>();List<String> array=["str1","str2"]; [String] array=new List(); [String] array=new List<String>(); [String] array=["str1","str2"]; 数组的定义(非泛型写法,效果等于[Object])List array=new List();List array=new List<String>();List array=["str1","str2"]; [] array=new List(); [] array=new List<String>(); [] array=["str1","str2"];
使用:
[String] array=["str1","str2"]; String v=array[0]; String v=map.get(0);
字典的定义(泛型写法)Map<String:Integer> map=new Map();//如果在构造方法new Map(Integer);传入参数则可以固定字典长度Map<String:Integer> map=new Map<String:Integer>();Map<String:Integer> map={"key1":10,"key2":20} {String:Integer} map=new Map(); {String:Integer} map=new Map<String:Integer>(); {String:Integer} map={"key1":10,"key2":20} 字典的定义(非泛型写法,效果等于{Object:Object})Map map=new Map();Map map=new Map<String:Integer>();Map map={"key1":10,"key2":20} {} map=new Map(); {} map=new Map<String:Integer>(); {} map={"key1":10,"key2":20}
支持一个key对应多个value
{String:Integer:Integer} map={"key1":10:11,"key2":20:21}
使用:
{String:Integer} map={"key1":10,"key2":20}Integer v=map["key1"];Integer v=map.get("key1"); {String:Integer:Integer} map={"key1":10:11,"key2":20:21}Integer v1,Integer v2=map["key1"];Integer v1,Integer v2=map.get("key1");
默认一个普通的类就是静态类(相对于动态类来说)。 定义静态类型类:
class A{ }
使用静态类型对象:
A a=new A(); a.name="tzc"//编译错误A没有a属性a=new A(); a.name="tzc"//编译错误Object没有a属性
使用interface关键字定义。
interface A{ }
或者:
interface class A{ }
接口是特殊的类。 方法都是实例的公有的,没有属性,必须继承才能new。
使用constant关键字定义。
constant A{ }
或者:
constant class A{ }
常量类是特殊的类。 属性、方法都是静态的,不能被继承。
使用final关键字定义。
final A{ }
或者:
final class A{ }
终态类是特殊的类。 不能被继承。
final关键字基本同java,但可以有以下用法:
{String:Integer} map=final {"key1":10,"key2":20}//map里的值不能修改,也不能添加和删除元素[String] array=final ["str1","str2"]//array里的值不能修改,也不能添加和删除元素Student stu=new final Student("zhangsan",20);//stu里的属性不能修改,也不能添加和删除属性
使用dynamic关键字定义。
dynamic A{//这样定义表示该类实现Dynamic接口}
或者:
dynamic class A{//这样定义表示该类实现Dynamic接口}
或者实现Dynamic接口:
class A implement Dynamic{ }
动态类是特殊的类。 能避免编译类型检查。
使用动态类型对象:
A a=new A(); a.name="tzc"//编译并运行正确Dynamic a=new A(); a.name="tzc"//编译并运行正确a=new A(); a.name="tzc"//编译错误Object没有a属性
class A{ } a=new dynamic A();//如果A没有实现Dynamic那么a是一个实现A并且实现Dynamic的子类的对象,相当于创建了一个匿名类。a.name="tzc"//编译并运行正确a=dynamic 10;//a是一个继承Integer并且实现Dynamic的子类的对象a=dynamic String;//a是一个继承String并且实现Dynamic的子类的对象
基础版的API类似JavaSE 高级版的API类似JavaEE
关于如何实现Drag语言设计 就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。