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);
}
其实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()函数。