今天,我决定开始学习Dart语言,而我从Tour开始,那里有一个示例:
// These work in a const string.
const aConstNum = 0;
const aConstBool = true;
const aConstString = 'a constant string';
// These do NOT work in a const string.
var aNum = 0;
var aBool = true;
var aString = 'a string';
const aConstList = [1, 2, 3];
const validConstString = '$aConstNum $aConstBool $aConstString';
// const invalidConstString = '$aNum $aBool $aString $aConstList';
和文字:
文字字符串是编译时常量,只要 插值表达式是一个编译时常量,其计算结果为 null或数字,字符串或布尔值。
我的问题与代码的最后一行有关。我已经阅读了几次文本,但我不明白为什么不能将表达式('$aNum $aBool $aString $aConstList'
)的结果赋给const
变量。但是,如果我这样更改代码:
const validConstString = '$aConstNum $aConstBool $aConstString';
var validString = '$aNum $aBool $aString $aConstList';
它将起作用。这些插值表达式之间有什么区别?我试图通过调试器查看结果:
我一直看到两个变量都具有相同类型的数据。只是字符串而已。
答案 0 :(得分:4)
这里
const aConstNum = 0;
const aConstBool = true;
const aConstString = 'a constant string';
您要声明常量值。它们不会在运行时更改,因此您在编译时知道该值将始终相同。因此,您可以在编译时将结果字符串声明为const。
const validConstString = '$aConstNum $aConstBool $aConstString';
这里
var aNum = 0;
var aBool = true;
var aString = 'a string';
您将变量声明为var
。它们可以在运行时更改其值,因此即使您分配了初始值,您也无法在编译时说出它们在应用程序生存期内的值。
这就是为什么将结果字符串声明为var
的原因。
var validString = '$aNum $aBool $aString $aConstList';
两个结果变量都将是字符串,但是第一个变量在应用程序的整个生命周期中将保持不变,而第二个变量可以在单个变量更改时更改。
答案 1 :(得分:2)
由于var aNum = 0;
不是const值,因此不能在字符串插值中将其用于另一个const值(const validConstString
)。
const
表示编译时常量,var
是仅在运行时获取值的变量,因此不能用于“计算”其他const值。