2016-08-23 51 views
0

我正在尝试创建一个宏,它允许我使用'thr'名称而不是'〜>'代码调用线程宏。我试过了:重命名线程代码的宏不起作用

(require threading) 
(define-syntax-rule (thr body ...) 
    (require threading) 
    (~> body ...)) 

(thr " checking " string-trim println) 

但它不起作用。错误是:

define-syntax-rule: too many forms in: (~> body) 

我也试图与只有一个身体statment但仍无法正常工作:

(define-syntax-rule (thr2 body) 
    (require threading) 
    (~> body)) 
+0

的错误仍然是一样的。如果我从宏中删除(需要线程),它会运行,但会给出输出:# rnso

回答

0

球拍做到这一点,最简单的办法是:

(define-syntax thr (make-rename-transformer #'~>)) 
+1

是的,它的工作原理。但是我仍然需要在此之前添加(需要线程)。有什么办法可以在宏中包含这个吗? – rnso

+2

可以这么说。如果你提供'thr'并在另一个文件中使用它,你不需要使用线程。 – soegaard

+2

你也可以''require(重命名在'threading [〜> thr]))',它有效地做同样的事情,甚至'(提供(重命名出来[〜> thr]))',然后导入提供模块。 –