2010-12-09 97 views
2

有沒有辦法讓閃存as3編譯器需要靜態類型?我有一個不這樣做的壞習慣,它會很好地讓它拋出編譯器錯誤。在as3的發佈設置中,我打開了「嚴格」​​,但這並沒有改變任何東西。有沒有辦法讓Flash強制靜態打字?

+1

我認爲你的意思是靜態類型,而不是強類型。 AS3是強類型的,但靜態類型不是必需的。 – Allan 2010-12-10 01:14:12

回答

4

我有點困惑。這不會給你任何編譯時間錯誤:

function enforceType(var_a:int, var_b:String) { 
    trace("passed"); 
} 

enforceType(1, 'test'); 
enforceType(1, 1); 
enforceType('test', 1); 

它確實對我來說。

編輯
由於您編輯了您的問題,我將編輯我的答案。
AS3 IS靜態類型IF您明確地鍵入您的變量。

例子:

var a:int = 0; 
a = "TEST"; 
// a is typed as an int, therefor when you attempt to compile the above, 
// you will get a compile time error 
// 1067: Implicit coercion of a value of type String to an unrelated type int. 

var a = 0; 
a = "TEST"; 
// Here, a is not typed explicitly, so you can assign whatever type you want, and 
// the compiler will not complain. 

因此,簡而言之,AS3是靜態,如果你希望它是類型化。編譯期間無法讓編譯器知道您實際需要分配哪種類型,因爲它是靜態類型。

想象一下,例如,您可以在Foo類中定義一個非類型化的靜態變量條。

package 
    class Foo { 
     public static var bar; 
    } 
} 

現在,在你的程序中兩個不同的地方,你訪問美孚。這兩個不同的接入點基於由於用戶交互而觸發的事件,如鼠標點擊。在你的兩個事件處理您具備以下條件:

// In one handler you have 
Foo.bar = 1; 
// and in another handler 
Foo.bar = "test"; 

編譯器就沒有辦法知道將首先運行,因爲它們都是基於用戶交互。所有的編譯器都可以這樣說:如果發生這種情況,它可以嗎?在這種情況下,因爲酒吧沒有輸入,所以沒關係。

如果Foo類改爲:

package 
    class Foo { 
     public static var bar:String; 
    } 
} 

編譯器會知道,上面列出的第一個事件處理程序是不行的,因爲門檻已經靜態類型是一個字符串。

長話短說(和要學的教訓):擺脫你的壞習慣並開始輸入你的變量。你會很高興你做到了。

For reference

1

我使用FlexBuilder編寫我的動作腳本。在強類型違規時,您會看到警告。除了警告在範圍內使用相同的變量名稱,未使用的導入等等。這當然與標準的AS3錯誤結合在一起。

如果沒有強大的IDE,我無法繼續。

FlexBuilder的替代方法,其中FDT和FlashDevlop的幫助方式相同。雖然他們可能沒有所有這些功能

相關問題