我創造了這個:球拍與哈希宏和重命名變壓器
(define-syntax (with-hash stx)
(syntax-parse stx
[(_ obj:id ((~or key:id [new-key:id hash-key:id]) ...) body:expr ...+)
#'(let ([key (hash-ref obj 'key)] ...
[new-key (hash-ref obj 'hash-key)] ...)
(begin body ...))]))
所以,我可以做到這一點:
(require rackunit)
(define h (hash 'id 1 'name "scott"))
(with-hash h (id [new-name name])
(check-equal? id 1)
(check-equal? new-name "scott"))
我如何可以添加自動綁定所有的哈希鍵的替代模式本地沒有客戶在呼叫中指定它們?
即:
(define h (hash 'id 1 'name "scott"))
(with-hash h
(check-equal? id 1)
(check-equal? name "scott"))
我懷疑這涉及到重命名變壓器,但我能夠申報語法參數和動態重新命名他們的基礎上,運行時哈希?
另外,我想這樣的事情可能是正確的軌道上:
(define-syntax (with-hash stx)
(syntax-parse stx
[(_ obj:id (key:id ...) body:expr ...+)
#'(let ([key (hash-ref obj 'key)] ...)
(begin body ...))]
[(_ obj:id body:expr ...+)
#'(with-hash obj (id title) body ...)]))
,我記得在宏觀和解析出的基準被束縛,但在這種情況下,ID和標題變量不受約束,即使宏觀以其他方式工作。
很明顯,我錯過了我的理解。
任何見解都值得讚賞。
謝謝。
謝謝瑞安.... – Scott 2013-04-21 23:14:42