gpt4 book ai didi

dart - 当不能以任何方式修改时,为什么不能在字符串文字中使用 const 列表?

转载 作者:行者123 更新时间:2023-12-04 03:30:11 25 4
gpt4 key购买 nike

void main() {
const list = [1, 2, 3];
const string = 'This is a $list'; // Error
}
当我无法分配时 list一个新值并修改它的任何元素,为什么我不能使用 list在我的字符串文字中?

最佳答案

Dart 没有说可以在编译时评估方法调用的概念(与 C++ 中的 constexpr 相反)。因此 Dart 不能保证在 const 上调用方法对象返回另一个 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');
}
请注意,这不适用于 .toString()一些内置类型(例如 null、numeric、string 和 boolean 类型)的实现,因为它们已知会产生常量值,并且因为 Dart 不允许从这些类型创建派生类,所以它们不能被覆盖来做像上面的例子。

关于dart - 当不能以任何方式修改时,为什么不能在字符串文字中使用 const 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67047305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com