【问题标题】:Downside to transparent structs?透明结构的缺点?
【发布时间】:2014-03-26 12:07:09
【问题描述】:

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

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

【问题讨论】:

  • 虽然这是有道理的(见stchang的回答),但我理解你的感受。事实上,struct not#:transparent 的另一个后果是:equal? 无法为它工作。 equal?总是返回 #f,即使如果 struct#:transparent 它将返回 #t。这咬了我。而不是像这样默默地“失败”,我想知道equal?是否应该引发异常。
  • @GregHendershott 这是一个很好的观点。我会问马特弗拉特这件事。
  • @GregHendershott 我与 Matt Flatt 就结构的默认设置不透明进行了交谈。他告诉我,当他的思维方式过于关注封装时,他犯了一个错误,如果他要回去再做一次,他会让它们默认透明。

标签: struct racket


【解决方案1】:

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

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

【讨论】:

  • “泄露”信息是有意识的、有针对性的选择,这是一件好事。
猜你喜欢
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
相关资源
最近更新 更多