這兩個術語在這個documentation中用了很多。 struct
的概念很容易理解,即對象的屬性是固定的,但是我們有dict
,它可以有任何數量的屬性,所以它與正常的Object
有什麼不同?爲什麼需要一個單獨的類型爲這個功能?struct和dict有什麼區別?
1
A
回答
1
我認爲關鍵的區別是對documentation page
鑑於使用@struct,你知道,編譯器將安全地重新命名所有的屬性,因爲你不能使用支架的訪問。通過使用@dict,你知道這些屬性在編譯後會有相同的名字。
(瞭解關於編譯器的關鍵是properties accessed with bracket notation are not renamed)。
使用閉包編譯器會按照您指定的方式限制您對JavaScript的使用。您正在告訴編譯器在您編寫代碼時警告您,該代碼打破了您使用類似@struct
和@dict
等註釋的限制。
如您所說,@dict
的確像「正常的Object
」一樣。通過使用@dict
,您告訴編譯器您將要爲對象添加屬性,並且不希望將這些屬性重命名爲最小名稱。
與之相反@struct
通常用於不關心編譯器重命名屬性的類。你也不希望爲這樣的對象添加屬性,所以如果你這樣做,應該是一個錯誤。
順便說一下,在我看來,page about struct and dict的例子有點難以理解,所以如果你仍然對該頁面上的任何東西感到困惑,隨時可以多問一些。
+0
關於這個http://stackoverflow.com/q/36770632/4260745的任何想法? – CodeYogi
相關問題
- 1. UserDict和Dict有什麼區別嗎?
- 2. dict,collections.defaultdict,collections.OrderedDict,collectinos.UserDict有什麼區別?
- 3. struct node和struct node *之間的' - >'有什麼區別?
- 4. typedef const struct * CGPath和typedef struct * CGPath有什麼區別?
- 5. struct node * head和struct node ** head有什麼區別?
- 6. `typedef struct X {}`和`typedef struct {} X`有什麼區別?
- 7. d.update(dict(a = 1,b = 2))和d.update(dict('a'= 1,'b'= 2)之間有什麼區別)
- 8. * args,** kwargs與用tuple和dict調用有什麼區別?
- 9. Python 3.2中的kwargs和dict有什麼區別?
- 10. 「struct node * temp」和「struct node *&temp」之間的區別是什麼?
- 11. Go中的new(Struct)和&Struct {}之間的區別是什麼?
- 12. 當在struct中聲明時,char []和char *有什麼區別?
- 13. 有什麼區別`和$(Bash中有什麼區別?
- 14. 有什麼區別? :和||
- 15. &&和||有什麼區別?
- 16. 「/」和「/ *」有什麼區別?
- 17. 有什麼區別:。!和:r!?
- 18. ==和===有什麼區別?
- 19. Appender和〜有什麼區別?
- 20. $ @和$ *有什麼區別?
- 21. is和=有什麼區別?
- 22. #.00和#。##有什麼區別?
- 23. `==`和`is`有什麼區別?
- 24. '=='和'==='有什麼區別?
- 25. /和/#/有什麼區別?
- 26. | 0和~~有什麼區別?
- 27. `&`和`ref`有什麼區別?
- 28. ==和===有什麼區別?
- 29. ==和===有什麼區別?
- 30. `{}`和`[]`有什麼區別?
'@ struct'和'@ dict'只是註釋,告訴編譯器該對象將如何使用。這在你連接的文檔中有解釋。不知道我理解你的問題... –
@FelixKling,因爲我告訴'結構'有一個合理的理由是單獨的類型,但在JavaScript中,我們已經有一個隱含的概念'dict'作爲一個對象,爲什麼我們需要創建一個單獨的類型爲了那個原因?實際上我們可以使用普通的Object作爲字典。 – CodeYogi
這似乎意味着每個未明確註釋爲@struct的對象只能使用括號表示來訪問,即如何使用該對象將被隱式限制。明確似乎更好? –