2016-08-23 54 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]))',然後導入提供模塊。 –