【问题标题】:What is the difference between struct and dict?struct 和 dict 有什么区别?
【发布时间】:2016-04-20 02:10:00
【问题描述】:

这两个术语在documentation 中被大量使用。 struct 的概念很容易理解,即属性是固定的对象,但是我们有 dict,它可以有任意数量的属性,那么它与普通的 Object 有何不同?为什么这个特性需要一个单独的类型?

【问题讨论】:

  • @struct@dict 只是告诉编译器如何使用对象的注释。您链接到的文档中对此进行了解释。不确定我是否理解您的问题...
  • @FelixKling 正如我告诉struct 有一个单独的类型的正当理由但是在javascript中我们已经隐含了dict 作为一个对象的概念,为什么我们需要为此创建一个单独的类型?事实上,我们可以使用普通的 Object 作为字典。
  • 这似乎意味着每个未显式注释为 @struct 的对象只能使用括号表示法访问,即如何使用该对象将受到隐式限制。显式似乎更好?

标签: javascript types google-closure-compiler google-closure-library


【解决方案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 上的示例在我看来有点难以理解,所以如果您仍然对该页面上的任何内容感到困惑,请随时询问更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-14
    • 2014-06-17
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 2017-01-11
    相关资源
    最近更新 更多