2014-02-24 89 views
4

我注意到球拍中的結構默認情況下不是透明的。這對我來說似乎很奇怪,因爲在我的(有限)體驗中,當你想看到某件事物的價值時,你想查看它的內容!具體而言,我指的是在定義結構時使用#:transparent關鍵字/機制。透明結構下降?

爲什麼球拍默認結構是不透明的?我唯一的猜測是,如果出於某種原因顯示或評估非常大的結構,它們會阻止向控制檯顯示太多內容。

+2

雖然有一個理由(見stchang的答案),我理解你的感受。事實上,'struct'_not_有另一個後果:'':transparent'':'equal?'不能用於它。 'equal?'將會返回'#f',即使當'struct'是'#:transparent'時它會返回'#t'。這已經咬傷了我。而不是像這樣默默地「失敗」,我不知道「平等嗎?」應該引發一個例外。 –

+0

@GregHendershott這是一個很好的觀點。我會問馬特弗拉特這件事。 – BlackVegetable

+1

@GregHendershott我與Matt Flatt談到了不透明結構的默認設置。他告訴我,當他的思維方式過度集中於封裝時,他犯了一個錯誤,如果他要回去重做,他會默認透明。 – BlackVegetable

回答

6

docs看來,默認情況下結構體是不透明的,以鼓勵更多的模塊化程序。當提供透明結構時,它們會自動泄漏其內部表示。

結構類型默認是不透明的,因爲不透明的結構實例提供了更多的封裝保證。也就是說,庫可以使用不透明的結構來封裝數據,並且庫的客戶端不能操作結構中的數據,除非庫允許。

+1

「泄漏」信息是一種有意識的定向選擇,這是一件好事。 – datashaman