haxe的Abstract資料型別(一)

2021-09-12 02:21:49 字數 1553 閱讀 4961

abstract是一種執行時型別。定義它可以修改或增強其行為:

abstract abstractint(int) 

}class main

}//------------------以上**在編譯成js的時候,如下所示

var a = 12;

console.log(a);

與類不同,abstract允許定義隱式型別轉換。有兩種隱式型別轉換:

1、直接轉化:允許將抽象型別直接強制轉換為其他型別或從其他型別直接強制轉換。如下例子:

abstract myabstract(int) from int to int 

}class main

}

2、類欄位通過元方法轉化。例子如下:

abstract myabstract(int) 

@:from

static public function fromstring(s:string)

@:to

public function toarray()

}class main

}

abstract a(int) 

abstract b(int)

abstract c(int)

class main

}

這種無語的例子,沒啥好說的。

重頭戲開始了:運算子的過載,c++中有這塊,有元方法的語言都有這塊,通過元方法過載運算子,可以最大限度的加強自定義抽象型別的功能。這塊怎麼說,笨辦法呢手寫一些函式實現,但是聰明的人總想點辦法用這個偷點懶,把麻煩解決在開始階段,想想也是好的。

abstract myabstract(string) 

@:op(a * b) //這種是典型的元資料操作,不懂的需要惡補metadata

public function repeat(rhs:int):myabstract

}class main

}

再來個例子

abstract myabstract(string) 

@:op(++a) public function pre()

return "pre" + this;

@:op(a++) public function post()

return this + "post";

}class main

}

比方int型別吧,總是允許比較大小,對吧? var a:int=3;var b:int=2; 對於int ,就有乙個比較操作,現在我們定義abstract(int)的時候。我們就可以操作gt(大於)的這種方法了,實現增強操作。但是不能把這個用於abstract(bool) 上,因為bool沒有比較大小的操作符。來個例子:

abstract myabstractint(int) from int to int 

class main

}}

haxe的時間使用

1 申明時間var date new date 2020,1,2,12,30,0 sun feb 02 2020 12 30 00 gmt 0100 w.europe standard time 建立乙個當前時間 var today date.now 2 格式化時間 date.getseconds ...

abstract 類的誤解

今天在寫 時,很多類中都要使用log4j,每個類中都要寫一句private logger log logger.getlogger myclass.class 特別麻煩,所以就想在父類中定義乙個protected log物件,供子類使用,網上搜了一下例子,從這些例子中看到了自己很多地方的誤解,特此記...

Haxe的結構體與匿名結構體

1 建立乙個匿名結構體 var mystructure 2 建立乙個復合匿名結構體 var user var start var target var current 引入typedef typedef point class path甚至匿名結構體還可以繼承 typedef point3 這樣就多...