根据DartLangSpec-v2.2,类中的静态变量和非静态变量可以具有相同的名称吗

根据DartLangSpec-v2.2,类中的静态变量和非静态变量可以具有相同的名称吗,dart,Dart,一个类有几个作用域: •类型参数范围,如果类不是泛型的,则为空(14)。 类的类型参数范围的封闭范围是封闭范围 类声明的范围。 •静态范围。类的静态作用域的封闭作用域是 类的类型参数范围(14)。 •实例范围。类的实例范围的封闭范围是 类的静态范围。 摘自第27页 我认为根据文件,它应该有效。但是得到编译错误。我对范围的理解是错误的吗?如果我错了,请您澄清dart中作用域和名称空间之间的区别。作用域/名称空间与您期望的非常接近。它们主要用于查找,而不是冲突解决。大多数冲突解决都在其他地方的规范中

一个类有几个作用域:

•类型参数范围,如果类不是泛型的,则为空(14)。 类的类型参数范围的封闭范围是封闭范围 类声明的范围。 •静态范围。类的静态作用域的封闭作用域是 类的类型参数范围(14)。 •实例范围。类的实例范围的封闭范围是 类的静态范围。 摘自第27页


我认为根据文件,它应该有效。但是得到编译错误。我对范围的理解是错误的吗?如果我错了,请您澄清dart中作用域和名称空间之间的区别。

作用域/名称空间与您期望的非常接近。它们主要用于查找,而不是冲突解决。大多数冲突解决都在其他地方的规范中显式处理(尽管少数冲突解决只是按照规则处理,即不能在作用域中引入相同的名称两次)

例如,对类的限制不仅仅是基于范围的限制,还包括:

  • 除非一个是setter,另一个是getter,否则类不能声明具有相同basename的两个成员
  • 类不能声明与继承成员具有相同basename的静态成员
  • 类不能声明与该类同名的类型参数
  • 类不能使用与类或类的类型参数的名称相同的basename声明成员

您的示例在第一项中失败。

作用域/名称空间与您预期的基本相同。它们主要用于查找,而不是冲突解决。大多数冲突解决都在其他地方的规范中显式处理(尽管少数冲突解决只是按照规则处理,即不能在作用域中引入相同的名称两次)

例如,对类的限制不仅仅是基于范围的限制,还包括:

  • 除非一个是setter,另一个是getter,否则类不能声明具有相同basename的两个成员
  • 类不能声明与继承成员具有相同basename的静态成员
  • 类不能声明与该类同名的类型参数
  • 类不能使用与类或类的类型参数的名称相同的basename声明成员
您的示例未通过第一项

class Foo {
    static var x;
    var x;
}