我注意到Racket中的结构默认不透明。这对我来说似乎很奇怪,因为在我(有限)的经历中,当你想要看到某些东西的价值时,你想查看它的内容!具体来说,我指的是在定义结构时使用#:transparent
关键字/机制。
默认情况下,为什么Racket的结构是不透明的?我唯一的猜测是,如果您正在为某些人显示或评估一个非常大的结构,它们会阻止向控制台显示太多内容原因。
答案 0 :(得分:6)
从docs来看,似乎默认情况下结构是不透明的,以鼓励更多的模块化程序。当提供透明结构时,它们会自动泄漏其内部表示。
默认情况下,结构类型是不透明的,因为不透明的结构实例提供了更多的封装保证。也就是说,库可以使用不透明结构来封装数据,除了库允许的情况外,库的客户端不能操作结构中的数据。