Scheme - 使用`this`作为lambda函数的参数?

时间:2015-01-24 07:51:03

标签: oop scheme this

有人可以澄清使用“this”关键字背后的概念吗?

(define call
  (lambda (obj method-name . args)
    (apply (obj method-name) obj args)))
(define -cuboid-
  (lambda (w l h)
    (define volume
      (lambda (this)
        (* h (call this 'area))))
    (define area
      (lambda (this)
        (* w l)))
    (lambda (method-name)
      (cond
        ((eq? 'volume method-name) volume)
        ((eq? 'area method-name) area)
        (else (error "method not found: ~s" method-name)))) 
(define r1 (-cuboid- 2 3 4))
(call r1 'area) ;=> 6
(call r1 'volume) ;=> 24

我理解this是一个引用正在使用的对象的关键字。我发现this单独在这个程序中没有任何特殊含义(它需要引用lambda函数的参数)。

来电是((-cuboid- 2 3 4) 'volume),它会带到(* h (call this 'area)),其中this已定义?

1 个答案:

答案 0 :(得分:3)

this只是lambda的参数,这可能是任何东西;尝试将其更改为,例如,第一个lambda中的myself和第二个中的me(顺便说一下,它不被使用,但需要在那里call才能工作)。

((-cuboid- 2 3 4) 'volume)的调用将返回该过程,其名称根据下面的草图进行绑定:

call中,r1 'volume调用"查找方法" -cuboid-并返回volume过程,然后使用obj参数调用该过程,将其绑定到名称this

因此,this绑定到r1的{​​{1}}参数

binding sketch