我读过dynamic是Dart中的一种数据类型,但是称它为数据类型是正确的吗?它看起来不像数据类型,它似乎是允许变量成为任何数据类型的一种方式。
发布于 2022-06-12 19:28:57
在Dart中,dynamic是一种类型。它属于类型层次结构,并通过子类型关系与其他类型相关。
它是"top“类型,这意味着每个类型都是dynamic的一个子类型。(包括自身,因为“子类型”关系是自反的-每一种类型都被认为是自身的子类型,而“适当的子类型”一词仅用于谈论非超级类型的子类型。)
作为顶级类型,它意味着任何值都可以赋值给dynamic类型的变量。它们也可以用于任何其他顶级类型,这主要是指Object?。两者的区别在于:
dynamic的表达式可以分配给任何类型。这显然是不安全的,因此运行时插入一个检查,即所谓的“隐式下传”,它的工作方式就像执行as TargetType.dynamic的表达式中的任何成员。这显然是不安全的,所以如果对象没有这样的成员,运行时就会抛出。这种运行时检查不安全行为(而不是静态类型检查)是该类型命名为dynamic的原因。使用dynamic是关闭静态类型系统的一种方法。小心使用。
是否可以将dynamic称为“数据类型”取决于“数据类型”的含义。Dart语言规范没有使用任何术语“数据类型”。
发布于 2022-06-12 19:11:56
是。规范称它为类型(https://www.ecma-international.org/publications-and-standards/standards/ecma-408/)
类型动态表示未知类型。如果没有提供静态类型注释,则类型系统假设声明具有未知类型type dynamic方法,用于每个可能的标识符和一致性,以及命名参数的每一种可能组合。这些方法的返回类型都是动态的,它们的形式参数都是动态的。类型dynamic对每个可能的标识符都具有属性。这些属性都具有动态
类型。
https://stackoverflow.com/questions/72594864
复制相似问题