Struct 透明结构的缺点?

Struct 透明结构的缺点?,struct,racket,Struct,Racket,我注意到Racket中的结构在默认情况下是不透明的。这对我来说似乎很奇怪,因为在我(有限的)经验中,当你想看到某物的价值时,你想查看它的内容!具体来说,我指的是在定义结构时使用#:transparent关键字/机制 Racket为什么默认情况下结构是不透明的?我唯一的猜测是,如果您出于某种原因正在显示或评估一个非常大的结构,它们会阻止向控制台显示太多的内容。从中看,似乎默认情况下结构是不透明的,以鼓励更多的模块化程序。当提供透明结构时,它们会自动泄漏其内部表示 默认情况下,结构类型是不透明的,因

我注意到Racket中的结构在默认情况下是不透明的。这对我来说似乎很奇怪,因为在我(有限的)经验中,当你想看到某物的价值时,你想查看它的内容!具体来说,我指的是在定义结构时使用
#:transparent
关键字/机制

Racket为什么默认情况下结构是不透明的?我唯一的猜测是,如果您出于某种原因正在显示或评估一个非常大的结构,它们会阻止向控制台显示太多的内容。

从中看,似乎默认情况下结构是不透明的,以鼓励更多的模块化程序。当提供透明结构时,它们会自动泄漏其内部表示

默认情况下,结构类型是不透明的,因为不透明结构实例提供了更多的封装保证。也就是说,库可以使用不透明结构来封装数据,并且库的客户端不能操作结构中的数据,除非库允许


虽然这是有道理的(见斯昌的回答),但我理解你的感受。事实上,
struct
不是
#的另一个结果是:透明的
相等?
不能工作
equal?
将始终返回
#f
,即使在
结构是
#透明的情况下返回
#t
。这咬了我一口。我想知道
equal?
是否应该引发一个异常,而不是像这样默默地“失败”。@GregHendershott这是一个很好的观点。我会问马特·弗拉特这个问题。@GregHendershott我和马特·弗拉特谈过结构的默认设置是不透明的。他告诉我,当他的思维方式过于关注封装时,他犯了一个错误,如果他回去再做一次,他会默认让它们透明。“泄露”信息是一种有意识、有针对性的选择,这是一件好事。