模块:test-define.rkt
#lang racket
(provide test)
(provide (contract-out [add-test! (-> void)]))
(define test 0)
(define (add-test!)
(set! test (add1 test)))
主程序:act.rkt
#lang racket
(require "test-define.rkt")
(printf "~a~%" test)
(add-test!)
(printf "~a~%" test)
运行 act.rkt,我得到:
0
1
这就是我要的。
但是,如果我在 test-define.rkt 中更改合同:
(provide test)
改成
(provide (contract-out [test integer?]))
然后我再次运行 act.rkt,我得到:
0
0
为什么?我无法更改测试值。
如果我提供一个 get func,它会再次正常。
(provide (contract-out [get-test (-> integer?)]))
(define (get-test)
test)
如果测试的类型更改为哈希映射,则始终是正常的。
我错过了什么?