モジュール: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)
テストのタイプがハッシュマップに変更された場合、それは常に正常です。
私が逃したものは?