您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何實現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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。