2012-04-14 48 views
1

可能重複:
Is there something like Matlab's eval statement in Objective-C 2.0?EVAL在Objective-C

是否有一個eval函數(如口齒不清,JavaScript的,Python和Ruby ...)在Objective-C?

我的意思是eval是一個函數,它可以將任意Objective-C代碼(可能具有類定義,副作用,內省等)作爲字符串(不是塊或NSInvocation或IMP或類似的東西),並評估每個表達式,尊重當前的運行時環境狀態,副作用,類定義等。

如果沒有,是否可以在現有運行時的範圍內實現?

+0

http://stackoverflow.com/questions/1116885/is-there-something -like-matlabs-eval-statement-in-objective-c-2-0,http://stackoverflow.com/questions/2550897/eval-for-objective-c-code,http://www.google.com/search?q = objective-c + eval – rid 2012-04-14 23:00:35

回答

1

絕對不是。 Objective-C是一種完全編譯的語言。只有解釋型語言才能做到這一點。

+11

另外,編譯/解釋是實現的一個屬性,與語言無關。當然,如果實際上只有一個實施,那不會爲你買東西。 – delnan 2012-04-14 23:07:10

+1

那裏有令人歎爲觀止的書呆子,delnan。絕對值得+1。 – 2012-04-14 23:19:37

+0

適當使用'迂迴',@PhilipSheard。 +1 – craig 2014-12-10 12:15:29

0

編號代碼eval是動態語言的功能。雖然Objective-C具有動態特性,甚至Cocoa運行時,但它仍被視爲靜態語言(通常)。

4

語言和Apple的框架都不直接支持這樣的事情。然而,LLVM的目標之一是成爲一個可嵌入的編譯器套件。我很確定它可以生成可執行代碼到內存中。困難的部分是提供該代碼訪問調用代碼的預先存在的環境。例如,編譯引用局部變量或類似的東西的代碼。

(請注意,這種做法是被禁止的iOS應用商店,但它可能也許是可行的Mac OS X上)