2013-12-24 29 views
5

我想能夠採取一個字符串(與適當的Dart語法)並將其轉換爲可調用的DART函數。有沒有辦法做到這一點?如何動態生成函數?

例如,我會收到字符串,

void test() { print("testing!"); } 

然後把它變成一個可調用的函數。我想這樣做的原因是能夠從其他服務器下載dart文件並調用它們的功能。

+0

可能有關聯? http://stackoverflow.com/questions/13293345/dynamic-class-method-invocation-in-dart –

+1

@ user1956570 https://www.dartlang.org/ - 驚人的,那些搜索引擎 – user2864740

回答

2

每鏢FAQ,https://www.dartlang.org/support/faq.html#q-is-it-really-a-dynamic-language-if-it-doesnt-have-eval-or-adding-fields-to-a-value-at-run-time

達特目前還沒有一個eval()函數,也不是任意字符串的支持運行時編譯,儘管它可能在未來。

所以,你必須在飛鏢內製作自己的虛擬機來做你想做的事情。

+0

謝謝。這是不幸的,但至少現在我知道了。 – Salgat

+1

我同意這個常見問題,我不確定飛鏢是什麼意思,「動態」,因爲......他們強調javascript對設計的重要性,而eval在那裏非常重要。 – Bandrami

+1

有一點需要記住的是,缺少像eval這樣的東西(有些人認爲這些東西並不是最好的),這樣編譯器就可以進行更多的優化,否則這些優化是可能的。 –

1

取決於您的目標平臺。如果您的目標是獨立的Dart VM,則已經可以實現。 SDK工具Pub正在這樣做。

您可以設置一個應用程序內部網絡服務器,該服務器將您的功能嵌入到gernated應用程序中。您可以將應用程序加載到另一個隔離區,並使用消息傳遞與該隔離區進行通信。這種方法也可以用來爲我們的應用程序創建插件。

但是可能需要很多時間才能自行實施。如果要解析數學表達式或其他簡化的語言部分,可以查看可用的Pub包(parsersmath_exprerssions)。

0

你目前可以做的是創建JavaScript並使用它的eval()並使用JS-interop。