我試圖把框架/語言列表支持運行時創建類。例如在.NET中,您可以使用System.Reflection.Emit
庫在運行時發出新類。如果你可以提及其他支持這個(或者它的一些變體)的框架/語言,那真的很有用。什麼框架/語言支持運行時類的創建?
謝謝:)
我試圖把框架/語言列表支持運行時創建類。例如在.NET中,您可以使用System.Reflection.Emit
庫在運行時發出新類。如果你可以提及其他支持這個(或者它的一些變體)的框架/語言,那真的很有用。什麼框架/語言支持運行時類的創建?
謝謝:)
動態語言如Python,拼音,...
的Objective-C支持它(objc_allocateClassPair)
根據你的意思,任何語言都可以。
例如,C++可以。乍一看,這是荒謬的 - C++是一種靜態類型的編譯語言。所以 - 你所做的是在你的項目中加入LLVM庫。這是一個編譯器後端,您可以使用它來描述您的類,編譯它們,並使用LLVM JIT運行它們,所有這些都在運行時爲您的應用程序運行。
IIRC,gcc後端是用C編寫的,所以如果你願意弄清楚那些代碼,你原則上可以在運行時用一種甚至沒有類的語言來定義類。
無論哪種方式,您的工作的一部分是定義一個類是什麼 - 這不是內置於編譯器後端,因爲它們應該支持一系列不同類型的系統的不同前端語言。
當然,我不推薦這種方法 - 只是指出這是可能的。
我的意思是明確的支持,但這很有趣。謝謝:) – Alix 2010-06-26 09:19:27
在JavaScript函數中是對象。因此給出一個函數的定義,如:
function Foo(x, y, z)
{
this.X = x;
this.Y = y;
this.Z = z; var g = function()
}
你可以創建一個新的對象是這樣的:
var obj = new Foo(a,b,c);
但在JavaScript中,你可以在運行時創建函數。
function MakeFoo(x, y, z, f) //where parameter f is a function
{
var g = function()
{
this.X = x;
this.Y = y;
this.Z = z;
this.DoSomething = f;
}
return g;
}
var my_class = MakeFoo(a, b, c, function() { /* Do Stuff */ });
var obj = new my_class();
obj.DoSomething();
有趣的,謝謝:) – Alix 2010-06-26 10:18:20
謝謝:)。並感謝您的參考。 – Alix 2010-06-26 08:41:50