Racket中的“dispatch”关键字

时间:2016-08-11 12:50:58

标签: scheme racket

此页面上显示的make-account功能中使用的“dispatch”关键字的作用是什么:https://courses.cs.washington.edu/courses/cse341/14wi/racket/objects.html

(define (make-account)
   (let ((my-balance 0))

      ;; return the current balance
      (define (balance)
         my-balance)

      ;; make a withdrawal
     (define (withdraw amount)
        (if (>= my-balance amount)
           (begin (set! my-balance (- my-balance amount))
                   my-balance)
           "Insufficient funds"))

     ;; make a deposit
     (define (deposit amount)
        (set! my-balance (+ my-balance amount))
        my-balance)

     ;; the dispatching function -- decide what to do with the request
     (define (dispatch m)
        (cond ((eq? m 'balance) balance)
              ((eq? m 'withdraw) withdraw)
              ((eq? m 'deposit) deposit)
              (else (error "Unknown request -- MAKE-ACCOUNT"  m))))

      dispatch))

Racket文档主要提到了网络调度(https://docs.racket-lang.org/search/index.html?q=dispatch)。

2 个答案:

答案 0 :(得分:1)

dispatch只是在词法范围内与my-balance一起制定的程序之一的名称和帮助程序。

它也是来自make-account过程的返回值,并作为消息传递过程运行到滚动您自己的类。调用它将返回一个可用于访问/改变对象数据的过程,因此命名为。

Dispatch并不是对象系统中传递消息所特有的,因此在处理Web服务器应用程序中的请求时会发现类似的措辞,以及处理请求/触发器上的某些内容的其他内容。

答案 1 :(得分:0)

(define (dispatch m)中,dispatch不是关键字或特殊形式。它是已定义函数的名称。