有人可以澄清使用“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
已定义?
答案 0 :(得分:3)
this
只是lambda
的参数,这可能是任何东西;尝试将其更改为,例如,第一个lambda中的myself
和第二个中的me
(顺便说一下,它不被使用,但需要在那里call
才能工作)。
对((-cuboid- 2 3 4) 'volume)
的调用将返回该过程,其名称根据下面的草图进行绑定:
在call
中,r1 'volume
调用"查找方法" -cuboid-
并返回volume
过程,然后使用obj
参数调用该过程,将其绑定到名称this
因此,this
绑定到r1
的{{1}}参数