【发布时间】:2015-01-23 08:09:47
【问题描述】:
我正在查看编程入门课程中的一些额外练习,这是来自关于带有 Scheme 的 OOP 的一节。
我将 -circle- 定义为具有参数半径的对象。 另外,我将区域定义为 -circle- 的方法。
(define -circle-
(lambda (r)
(define area (lambda () (* pi r r)))
(lambda (method-name)
(cond
((eq? method-name 'area) area)
(else (error '-circle- "Method not found: ~s" method-name))
))))
我将 call 定义为将可选参数应用于对象方法的函数。 (我并不讨厌这里的语法,但这是给定的,我想我理解的意思是:“首先将方法应用于对象,如果你有参数,也将它们放入”)。
(define call
(lambda (obj method-name . args)
(apply (obj method-name) args)))
测试示例(在 DrRacket/Pretty Big 中完美运行)是:
(define c1 (-circle- 3))
(call c1 'area)
但在我看来,这种关闭会带来:
(call -circle- 3 'area)
代替:
(call -circle- 'area . 3)
(这又会导致illegal use of '.' 错误)。
有人能澄清一下带有可选参数的输入在这种情况下是如何工作的吗?
【问题讨论】:
标签: oop arguments scheme optional-parameters