2014-01-13 102 views
1

是否可以在Fantom運行時採用源代碼的字符串/ AST並對其進行評估(如eval())?我在文檔中發現了一些建議功能,但沒有明顯的證據。在運行時動態評估代碼

+0

你在看哪些文件的部分? –

回答

1

這不像調用eval()函數那麼簡單,但它是可能的。您需要先將您的Fantom代碼編譯到類中,然後才能執行它。

Plastic,來自Alien-Factory的圖書館就是這麼做的。例如:

using afPlastic 

class Example { 
    Void main() { 
     eval("2 + 2") // --> 4 
    } 

    Obj? eval(Str code) { 
     model := PlasticClassModel("MyClass", true) 
     model.addMethod(Obj?#, "eval", "", code) 
     myType := PlasticCompiler().compileModel(model.toFantomCode) 
     return myType.make->eval() 
    } 
} 

PlasticCompiler類完成編譯代碼魅影成可用的類型的作業。

它使用Fantom compiler庫,它基於Fansh中的代碼 - Fantom外殼,屬於Fantom發行版的一部分。