2014-03-13 25 views

回答

2

關鍵字var表示可變變量,具有明確的dynamic類型說明符。 顯式類型說明符意味着這不可能在聲明中指定另一種類型。

關鍵字final表示val或具有未指定類型的不可變變量,具有隱含的dynamic類型。 隱式類型說明符表示可以在聲明中指定其他類型。

聲明爲val的更精確的變量是valuevariable一次。

它是可變的,因爲有runtime storage

但它也是immutable value,可以從關聯的存儲檢索一次,可以在任何地方使用。

現在考慮下面的代碼:

final var foo; 

這是一樣的下面的僞代碼:

immutable mutable dynamic foo; 

當然,這是不行的。

4

這可能是分析儀中的一個錯誤。 finalvar是互斥的。

下列之一是允許

  • 最終標識符
  • 最終類型標識符
  • const的標識符
  • const型標識符
  • 變種標識符
  • 類型標識符

Dart Programming Language Specification (1.2) - Variables

finalConstVarOrType: 
    final type? 
    | const type? 
    | varOrType 
    ; 
varOrType: 
    var 
    | type 
    ; 

編輯

我DartEditor(DART VM版本:1.3.0 dev.3.2(週一3月10日10時15分05秒2014)的 「linux_x64」)顯示錯誤對於final var xxx(成員不能被聲明爲'final'和'var')。

+0

是啊謝謝你回答這個,親切的@GünterZöchbauer:)順便說一句,我不明白爲什麼'var'不被規範允許。也許,這種類型在編譯時不固定? –

+0

@sunglim'var'指定該字段允許任何類型,但如果該字段爲「final」,則它只能有一種類型 - 它初始化的值的類型,因此這兩個關鍵字相互衝突(只是我的意見,我對發生的決策過程沒有特別的瞭解) –

+1

@sunglim這很容易。關鍵字'var'意味着可變的變量。關鍵字'final'意味着'val',不可變變量,或者只是一個不是'const'值的值,但它也不是可變的。不是'const',因爲它具有'運行時存儲',但同時這只是一個不可變的「值」存儲。現在考慮下面的代碼:'final var foo'這個和'val var foo'相同。正如你所看到的,這不可能立即將變量聲明爲可變且不可變的。 – mezoni

相關問題