为什么不在Racket中作为构造函数工作?

时间:2015-10-22 17:07:15

标签: racket

"额外"构造函数 make-posn 有效。为什么不单独 posn ?感谢。

我想将它用于 place-images

2 个答案:

答案 0 :(得分:3)

我认为您可以通过将其添加到定义的开头来使posn可用。

(define (posn x y)
  (make-posn x y))

原因主要是历史性的。

回到过去,结构foo的构造函数被命名为make-foo。在某些时候它被改为foo。由于教学语言用于书籍和其他教育材料,公约make-foo没有改变。

由于教学语言通常使用posn,因此名称为posn的构造函数是故意隐藏的。

请注意,您不能“欺骗系统”并使用:

#lang racket
(struct posn (x y))
call drawing operations here

每次(struct posn ...)都会看到一种新类型的posn - 结构。在这里使用(posn ...)将构建您的posn - 结构版本,并且绘图操作期望来自教学语言 - 因此这将导致错误。

答案 1 :(得分:1)

你使用的是一种我认为的语言?在#lang racket  您使用(struct ...)代替例如(define-struct ...)定义结构,类似(posn ...)代替(make-posn ...)