我想匹配一个结构test
,并从中构建一个结构,但我该怎么做呢?
我甚至无法使用eval
来执行此操作?
请参阅代码,
#lang racket
(struct test (num) #:prefab)
(define s `((AK= #(struct:test 100))
(AV)
))
(define ns (make-base-namespace))
(define (set-state-space-vals!)
(namespace-set-variable-value! 'test test #f ns)
)
(match s
[`((AK= #(struct:test ,val) (AV))) ;; can't match
(displayln val)
]
[`((AK= ,val) (AV)) ;; can match, but how to build the struct?
(struct? (eval val ns))
(match-define (struct test (num)) (eval val ns)) ;this will fail
(displayln num)
] )
答案 0 :(得分:3)
我认为你正在寻找这样的东西:
(struct test (num) #:prefab)
(define s '((AK= #s(test 100)) (AV)))
(match s
[`((AK= ,(struct test (val))) (AV))
(displayln val)])
此外,通常在这种情况下使用eval
是非常不可取的。如有疑问,请勿使用eval
。有关详细说明,请参阅this blog post。您可能还希望在prefabs和pattern matching上看到指南条目。
答案 1 :(得分:1)
此外,虽然它不在匹配的文档中,`((AK = #s(test,val))(AV))是一个有效的模式。