【发布时间】:2014-03-26 12:07:09
【问题描述】:
我注意到 Racket 中的结构默认情况下是不透明的。这对我来说似乎很奇怪,因为在我的(有限的)经验中,当您想查看某物的价值时,您想查看其内容!具体来说,我指的是在定义结构时使用#:transparent 关键字/机制。
为什么 Racket 的结构默认是不透明的?我唯一的猜测是,如果您正在为某些人显示或评估非常大的结构,它们会阻止向控制台显示过多的内容原因。
【问题讨论】:
-
虽然这是有道理的(见stchang的回答),但我理解你的感受。事实上,
structnot 是#:transparent的另一个后果是:equal?无法为它工作。equal?将总是返回#f,即使如果struct是#:transparent它将返回#t。这咬了我。而不是像这样默默地“失败”,我想知道equal?是否应该引发异常。 -
@GregHendershott 这是一个很好的观点。我会问马特弗拉特这件事。
-
@GregHendershott 我与 Matt Flatt 就结构的默认设置不透明进行了交谈。他告诉我,当他的思维方式过于关注封装时,他犯了一个错误,如果他要回去再做一次,他会让它们默认透明。