Играя с Racket в DrRacket, я случайно вошел в окно взаимодействий.
(определить x 7)
(определить x 8)
, и DrRacket разрешил это, то есть я не получил сообщение об ошибке «дублирование определения идентификаторов».
Итак, чтобы попытаться выяснить, что происходит, я ввел это в окно определений DrRacket:
Фрагмент кода A
(define-namespace-anchor a)
(define ns (namespace-anchor->namespace a))
(eval '(begin (define x 7) (define x 8)) ns)
(eval 'x ns)
и до сих пор нет «ошибки дублирующихся определений».
Затем я попробовал это также в окне определений:
Фрагмент кода B
(define x 9)
(define-namespace-anchor a)
(define ns (namespace-anchor->namespace a))
(eval '(begin (define x 7) (define x 8)) ns)
(eval 'x ns)
и я получил сообщение об ошибке: cannot redefine a constant x
.
Может кто-нибудь объяснить мне, почему во фрагменте кода A в окне определений (а также просто ввод (define x 7)
с последующим (define x 8)
в окне взаимодействий)не выдайте мне дублирующую ошибку в определениях.