我有以下测试示例可以使用read
,但遇到了一些问题:
#lang racket
(struct test (num) #:prefab)
(define s3 (read (open-input-string "((AK= #s(test .)) (AV))")))
(match s3
[`((AK= ,(struct test (val))) (AV)) (displayln val)])
它会发出read: unexpected
)'`
我知道这是因为.
,但我的来源会包含很多此类内容,那么问题是如何在球拍中阅读它们?
提前致谢...
答案 0 :(得分:2)
您可以使用read-accept-dot
和read-accept-infix-dot
禁用阅读点,但如果有点,则只会出现错误。所以听起来你想在这里使用custom readtable(也请阅读guide section):
#lang racket
(struct test (num) #:prefab)
(define rt:no-dots
(make-readtable (current-readtable)
#\. 'non-terminating-macro ( _ #'|.|)))
(define (read-with-dots str)
(parameterize ([current-readtable rt:no-dots])
(read (open-input-string str))))
(define s3 (read-with-dots "((AK= #s(test .)) (AV))"))
(match s3
[`((AK= ,(struct test (val))) (AV)) (displayln val)])
或者,您可以将这些点视为注释:
(define rt:no-dots
(make-readtable (current-readtable)
#\. 'non-terminating-macro
( _ (make-special-comment #f))))