我想知道在使用eval
之類的函數時,數據vs代碼替換是如何工作的,該函數允許我傳遞任何打印命令,如print
princ
等等以及一些文本和它使用該命令在其輸出:eval如何以這種方式處理函數
(defun print-test (fn text)
(eval '(fn 'text)))
我已經試過各種方法,但我不能讓這個運行。我也試過:
(defun print-test (fn text)
(eval ('fn 'text)))
..和其他變化。所以我顯然錯過了一些東西。我希望能夠做到這一點:
(print-test 'princ 'some-text)
我通常得到一個錯誤fn is undefined
。但是因爲我正在實時評估代碼,所以我認爲從我的輸入中可以得到fn
?
我知道還有其他的方法可以做到這一點,比如傳入一個像#'princ
這樣的實際函數對象,但我很好奇eval
機制如何在運行中生成代碼。
我意識到這是一個簡單的例子,但我想了解EVAL作品。但是,當我嘗試使用你的版本時,我仍然會遇到錯誤:'(print-test'princ'hi)''變量HI沒有綁定。' – johnbakers
@OpenLearner如果你嘗試評估' princ hi)'?當我在REPL中輸入'(princ hi)'時,我得到'hi is undefined'。我期望'eval'給我同樣的東西。 –
我試圖評估'(princ'hi)'所以'hi'需要通過但仍然引用 – johnbakers