scheme 模拟 OOP

目录

lisp 作为一种多范式的编程语言自然可以模拟 OOP,SICP 中简单的介绍了一下 OOP 的方法

OOP 程序

; 定义了一个银行账户的 class
(define (make-account balance)
; 从账户中取钱的方法
  (define (withdraw amount)
    (if (>= balance amount)
        (begin (set! balance (- balance amount))
               balance)
        "Insufficient"))

; 从账户中存钱的方法
  (define (deposit amount)
    (set! balance (+ balance amount))
    balance)

; 把这个 class 中的方法暴露出去

  (define (dispatch m)
    (cond ((eq? m 'withdraw) withdraw)
          ((eq? m 'deposit) deposit)
          (else (display "error"))))

 dispatch)

; 实例化一个账户
(define acc (make-account 100))
; 从中取 50
((acc 'withdraw) 50)
; 从中取 60
((acc 'withdraw) 60)
; 从中存 40
((acc 'deposit) 40)
((acc 'withdraw) 60)

; 可以看见模拟 OOP 完全是依赖了闭包

目录