假設我有一些函數返回一個結構:更新整個結構
(struct layer (points lines areas))
(define (build-new-layer height)
...
(layer list-a list-b list-c))
我想要跟蹤的最後返回的結果是這樣的:
(define top-side (build-new-layer 0)) ; store the first result
...
(set! top-side (build-new-layer 0.5)) ; throw away the first result and store the new one
然而,對於特定代碼我得到的錯誤:
set!: assignment disallowed;
cannot modify a constant
constant: top-side
請告訴我什麼是正確的方式做我想要的
如果用戶在做一個'設置'在REPL,如果定義在模塊中,它可能無法工作。 Racket會通過模塊的主體來確定哪些綁定是常量,如果模塊的主體本身沒有設置綁定,它將不允許REPL「設置」它。參見:http://docs.racket-lang.org/reference/eval.html#(def._((quote._~23~25kernel)._compile-enforce-module-constants))。 – dyoo 2013-03-06 19:11:20
如果是這種情況,那麼用戶可以在'top-side'的第一個定義的下面添加以下內容:'(set!top-side top-side)'。它看起來像一個沒有操作,但它說服了球拍「頂端」不應被視爲模塊綁定常數。 – dyoo 2013-03-06 19:15:27
謝謝,dyoo。 '(set!top-side top-side)'真的解決了這個問題。不幸的是,我在語言窗口中找不到任何有用的信息。 – skobls 2013-03-07 00:06:18