P.S. Maybe a simpler example I should have used: (define next-web-parameter-id (let ([i (box 0)]) (lambda () (begin0 (unbox i) (set-box! i (add1 (unbox i)))))))
In both examples the box is involved in a closure lambda pattern. This example, my old C/C++ brain wants to interpret it as a kind of thread-safe increment of a variable. But what's really going on? On Thu, Oct 21, 2010 at 11:22 AM, Greg Hendershott <greghendersh...@gmail.com> wrote: > Where can I find more information about the use scenarios for "box"? > > The Guide is terse: > >>> > 3.11 Boxes > > A box is like a single-element vector. It can print as a quoted #& > followed by the printed form of the boxed value. A #& form can also be > used as an expression, but since the resulting box is constant, it has > practically no use. > << > > This explains what a box is, but not why or when you would want to use one. > > I see box used as in this example from servlet-dispatch.rkt: > > (define (dispatch/servlet > ... > (define servlet-box (box #f)) > ... > (filter:make > ... > (lambda (url) > (or (unbox servlet-box) > (let ([servlet > (parameterize ([current-custodian (make-custodian)] > [current-namespace > (make-servlet-namespace > #:additional-specs > default-module-specs)]) > (if stateless? > (make-stateless.servlet > servlet-current-directory stuffer manager start) > (make-v2.servlet servlet-current-directory > manager start)))]) > (set-box! servlet-box servlet) > servlet)))))) > > And I'm scratching my head, not understanding the point of using a box > as opposed to a simple non-boxed value. > > My question isn't about this code per se; only an example. Generally, > in what situations would you use a box, and why? > > Thank you. > _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users