我有一個宏,當一個參數傳遞時工作,我想擴大它接受n個參數使用...,但我無法弄清楚語法。球拍宏省略號語法
該宏接受自定義語法,即key:val key:val,或者它接受一個過程。
例如:(3不同的用途)
(schema-properties [(name:first-name type:string)])
(schema-properties [(name:age type:number required:#t)])
(schema-properties [(my-custom-fn arg1 arg2 arg3)])
定義:
(define-syntax (schema-properties stx)
(syntax-parse stx
[(_ [(prop:expr ...)])
(with-syntax ([prop0 (make-prop-hash #'(prop ...))])
#'(list prop0))]))
(define-for-syntax (make-prop-hash stx)
(with-syntax ([(props ...) stx])
(if (regexp-match #px":"
(symbol->string (car (syntax->datum #'(props ...)))))
#'(pairs->hash 'props ...)
#'(props ...))))
這工作,即它檢查道具:EXPR語法的presense 「:」,並且如果它存在,將它傳遞給函數(pairs-> hash'props ...),否則,它只是調用它(道具...)。現在
,我希望能夠通過在:
(schema-properties [(name:first-name type:string)
(name:last-name type:string)
(my-fn arg1 arg2 arg3)])
,並有它的工作方式相同。但我目前處於省略號的地獄,我的大腦不再正常工作。
任何見解都值得讚賞。
像往常一樣,從丹尼徹底和立即響應!非常感激。 – Scott