小编Nar*_*eva的帖子

clojure引号和宏中的波浪号

我是Clojure的新手,我无法理解它的报价系统.我正在写一个宏,我做了两个相似的案例 - 一个是有效的,另一个则没有.从某种意义上说,我只是试图用try/catch条件包围我的语句.

这是有效的代码:

(defmacro safe
  [arg1 arg2]
  (list 'let arg1 arg2)
)
Run Code Online (Sandbox Code Playgroud)

这是不起作用的代码

(defmacro safe
    [arg1 arg2]
    '(try
        ~(list 'let arg1 arg2)
        (catch Exception e (str "Error: " (.getMessage e)))
    )
)
Run Code Online (Sandbox Code Playgroud)

~符号之后,它应该逃脱引号,但由于某种原因,它似乎没有.错误是:"无法解析符号:此上下文中的arg1 ......".

谢谢你的帮助!


编辑:

我用以下代码调用宏的代码:

(println (safe [s (new FileReader (new File "text.txt"))] (.read s)))
Run Code Online (Sandbox Code Playgroud)

另外,我导入这个:

(import java.io.FileReader java.io.File)
Run Code Online (Sandbox Code Playgroud)

目标是从文件中读取第一个符号,同时避免不正确的文本文件名.顺便说一句,这是我的学校作业,所以我不应该用任何其他方式来做这个,并且必须像这样调用宏,我知道with-open等等.

lisp macros clojure quoting

2
推荐指数
1
解决办法
3315
查看次数

标签 统计

clojure ×1

lisp ×1

macros ×1

quoting ×1