void main() {
const list = [1, 2, 3];
const string = 'This is a $list'; // Error
}
Run Code Online (Sandbox Code Playgroud)
当我无法分配list新值并修改其任何元素时,为什么我不能list在字符串文字中使用 the ?
Dart 没有这样的概念:方法调用可以在编译时求值(与constexprC++ 不同)。const因此,Dart 无法保证在一个对象上调用方法会返回另一个const对象,这包括在进行字符串插值时的隐式调用.toString()。
例如,这是完全合法的:
import 'dart:math';
final random = Random();
class Foo {
const Foo();
// Returns a string that is clearly not a compile-time constant.
@override
String toString() => random.nextInt(100).toString();
}
void main() {
const foo = Foo();
print('$foo');
const list = [foo, foo, foo];
print('$list');
}
Run Code Online (Sandbox Code Playgroud)
请注意,这不适用于.toString()某些内置类型(例如 null、数字、字符串和布尔类型)的实现,因为已知它们会生成常量值,并且 Dart 不允许从这些类型创建派生类,因此它们不能被覆盖来进行像上面例子这样的恶作剧。
| 归档时间: |
|
| 查看次数: |
991 次 |
| 最近记录: |