2

我試圖把框架/語言列表支持運行時創建類。例如在.NET中,您可以使用System.Reflection.Emit庫在運行時發出新類。如果你可以提及其他支持這個(或者它的一些變體)的框架/語言,那真的很有用。什麼框架/語言支持運行時類的創建?

謝謝:)

回答

2

動態語言如Python,拼音,...

1

根據你的意思,任何語言都可以。

例如,C++可以。乍一看,這是荒謬的 - C++是一種靜態類型的編譯語言。所以 - 你所做的是在你的項目中加入LLVM庫。這是一個編譯器後端,您可以使用它來描述您的類,編譯它們,並使用LLVM JIT運行它們,所有這些都在運行時爲您的應用程序運行。

IIRC,gcc後端是用C編寫的,所以如果你願意弄清楚那些代碼,你原則上可以在運行時用一種甚至沒有類的語言來定義類。

無論哪種方式,您的工作的一部分是定義一個類是什麼 - 這不是內置於編譯器後端,因爲它們應該支持一系列不同類型的系統的不同前端語言。

當然,我不推薦這種方法 - 只是指出這是可能的。

+0

我的意思是明確的支持,但這很有趣。謝謝:) – Alix 2010-06-26 09:19:27

2

在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(); 
+0

有趣的,謝謝:) – Alix 2010-06-26 10:18:20