haxe的泛型型別的編譯問題(Generic)

2021-09-12 12:19:58 字數 1030 閱讀 2435

haxe是乙個介於動態語言和靜態語言之間的語言,能適應多平台。因此haxe的泛型在各個平台對於編譯結果可能會出現各種型別編譯錯誤,因此引入了@:generic元資料,可以強制目標平台多增加一條匹配型別的方法。例如:

@:generic

class myvalue

}class main

}//---------------------對於js的編譯結果如下-------------------

(function () ;

test.main = function() ;

var myvalue_int = function(value) ;

var myvalue_string = function(value) ;

test.main();

})();

//--------------------如果我把元資料去掉,結果如下--------------

(function () ;

var main = function() ;

main.main = function() ;

main.main();

})();

也可以用於單個方法上:

class main 

@:generic static function method(t:t)

}

編譯器只能認乙個實際的物件,因此不用泛型產生乙個實際物件,如:new t()會產生編譯錯誤。但是可以用@:generic做到這種事情。

import haxe.constraints;

class main

@:generic

static function makevoid>>():t

}

需要注意的是,這裡使用自上而下的推理來確定t的實際型別,要做到這個事情有兩個條件:

1、要用generic關鍵字

2、必須嚴格限制引數:給定引數真實型別。

使用 泛型類 泛型方法 解決 動態型別 問題

專案中用到乙個類,他有乙個儲存資料的屬性value,這個屬性有個比較奇怪的地方就是,他的型別,是無法預先估計的,會隨著軟體的擴充套件而變化,也就是我們常說的動態型別。二 分析問題 這個問題解決方法很容易就可以看出有2種 1 使用object基類 使用這種方式能夠解決問題,但是會引起裝箱 拆箱等影響效...

c 判斷 泛型t 型別 C 泛型方法的型別推斷

這裡所謂的 泛型方法的型別推斷 指的是根據已有的方法實參的型別,推斷出泛型方法的型別實參。例如乙個泛型方法 void method t args 如果我給出方法實參型別是 int,那麼希望能夠推斷出 t int。或者舉個複雜點的例子,對於下面的泛型方法定義 void method ilist a,p...

泛型型別引數的約束

泛型型別引數的約束 在定義泛型類時,可以對客戶端 能夠在例項化類時用於型別引數的型別種類施加限制。如果客戶端 嘗試使用某個約束所不允許的型別來例項化類,則會產生編譯時錯誤。這些限制稱為約束。約束是使用where上下文關鍵字指定的。下表列出了六種型別的約束 約束 說明 t 結構 型別引數必須是值型別。...