Dart语言关键词之dynamic

Dart语言关键词之dynamic

我们先看一看ecma中的定义

Type dynamic has methods for every possible identifier and arity, with every possible combination of named parameters. These methods all have dynamic as their return type, and their formal parameters all have type dynamic. Type dynamic has properties for every possible identifier. These properties all have type dynamic.

dynamic类型具有所有可能的属性和方法。Dart语言中函数方法都有dynamic类型作为函数的返回类型,函数的参数也都有dynamic类型。

上面的定义告诉我们,我们不会获得warning当我们调用dynamic变量的任何方法。但是用Object定义变量时则会出现告警。下面是demo

dynamic a;
Object b;

main() {
  a = "";
  b = "";
  printLengths();
}

printLengths() {
  // no warning
  print(a.length);

  // warning:
  // The getter 'length' is not defined for the class 'Object'
  print(b.length);
}
dart

其实dynamic不是实际的type,而是类型检查开关。一个变量被dynamic修饰,相当于告诉static type 系统“相信我,我知道我自己在做什么”。
例如
dynamic d_name; //不要进行类型检查了。即使出错了,是我自己的责任。
Object o_name;//v_name不是别人,就是Object的实例化。

因此您可以 v_name.foo(),无论v_name有没有foo()函数,编译时并不会检查。 o_name.foo() 肯定会报警,object对象没有foo()函数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容