Dart語言關(guān)鍵詞之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語言中函數(shù)方法都有dynamic類型作為函數(shù)的返回類型梭域,函數(shù)的參數(shù)也都有dynamic類型斑举。
上面的定義告訴我們,我們不會獲得warning當(dāng)我們調(diào)用dynamic變量的任何方法病涨。但是用Object定義變量時則會出現(xiàn)告警富玷。下面是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,而是類型檢查開關(guān)既穆。一個變量被dynamic修飾赎懦,相當(dāng)于告訴static type 系統(tǒng)“相信我,我知道我自己在做什么”循衰。
例如
dynamic d_name; //不要進行類型檢查了铲敛。即使出錯了,是我自己的責(zé)任会钝。
Object o_name;//v_name不是別人伐蒋,就是Object的實例化。
因此您可以 v_name.foo(),無論v_name有沒有foo()函數(shù)迁酸,編譯時并不會檢查先鱼。 o_name.foo() 肯定會報警,object對象沒有foo()函數(shù)奸鬓。