如何从构造函数初始化列表中的常量构造函数访问属性?
How to access the attribute from a constant constructor in the constructor initialiser list?
我无法理解 Dart 中的常量构造函数和构造函数初始值设定项列表。
我有这个小代码:
class A {
const A();
}
class B {
const B();
final A a = const A();
}
class C {
const C(): a = const A();
final A a;
}
class D {
const D(): b = const B();
final B b;
}
class E {
const E(): a = const B().a; // <- Lint: Invalid constant value
final A a;
}
所有这些 类 及其构造函数都是合法的。 E
和 E()
构造函数除外。
我不明白的是 D
构造函数是有效的:
const C(): a = const A();
但是E
无效:
const E(): a = const B().a; // <- Lint: Invalid constant value
有点疑惑,为什么B()
可以是常量而B().a
不是?我会想如果一个对象是一个常量构造函数,B().a
也会是一个常量值。
我在这里错过了什么?
It kind of confuses me, why does B()
can be a constant value not B().a
is not? I would have thought if an object is a constant constructor, B().a
would have been a constant value too.
Dart 没有 C++ 中的 constexpr
等价物。 Dart 无法传达 methods/functions 可以作为编译时常量表达式进行计算和调用。
B().a
在 B()
上调用名为 a
的 getter。仅仅因为 const B()
是一个 const
对象并不意味着 const B().a
returns 是一个常量值。例如,B
的实现可能是:
class B {
const B();
// Returns a new `A` instance each time.
A get a => A();
}
我无法理解 Dart 中的常量构造函数和构造函数初始值设定项列表。
我有这个小代码:
class A {
const A();
}
class B {
const B();
final A a = const A();
}
class C {
const C(): a = const A();
final A a;
}
class D {
const D(): b = const B();
final B b;
}
class E {
const E(): a = const B().a; // <- Lint: Invalid constant value
final A a;
}
所有这些 类 及其构造函数都是合法的。 E
和 E()
构造函数除外。
我不明白的是 D
构造函数是有效的:
const C(): a = const A();
但是E
无效:
const E(): a = const B().a; // <- Lint: Invalid constant value
有点疑惑,为什么B()
可以是常量而B().a
不是?我会想如果一个对象是一个常量构造函数,B().a
也会是一个常量值。
我在这里错过了什么?
It kind of confuses me, why does
B()
can be a constant value notB().a
is not? I would have thought if an object is a constant constructor,B().a
would have been a constant value too.
Dart 没有 C++ 中的 constexpr
等价物。 Dart 无法传达 methods/functions 可以作为编译时常量表达式进行计算和调用。
B().a
在 B()
上调用名为 a
的 getter。仅仅因为 const B()
是一个 const
对象并不意味着 const B().a
returns 是一个常量值。例如,B
的实现可能是:
class B {
const B();
// Returns a new `A` instance each time.
A get a => A();
}