我有一个包含多个字段的 Dart 类,这些字段必须是final,因为该类扩展了另一个标有@immutable. 这些字段的值应该在创建类的实例时计算。在 Dart 中,“必须在构造函数体开始之前初始化最终实例变量”(来自 dartlang.org)。在该范围内,您只能调用static方法。
这对我有用,除了某些字段依赖于相同的计算,这意味着相同的计算进行了两次。有没有办法避免这种情况,即通过保存一些临时结果?
我目前的代码:
class _IntegralCurve extends Curve {
static double delta = 0.01;
_IntegralCurve(this.original) :
integral = calculateIntegral(original),
values = calculateNormalizedValues(original);
final Curve original;
final double integral; // Accessible to other classes.
final Map<double, double> values;
/// Does the actual integrating work. Called twice.
static Map<double, double> integrate(Curve original) {
double integral = 0.0;
final values = Map<double, double>();
for (double t = 0.0; t <= 1.0; t += delta) {
integral += original.transform(t) * delta;
values[t] = integral;
}
values[1.0] = integral;
return values;
}
/// Calculates the integral.
static double calculateIntegral(Curve curve) => integrate(curve)[1];
/// Calculates cumulative values.
static Map<double, double> calculateNormalizedValues(Curve curve) {
final values = integrate(curve);
for (final double t in values.keys) {
values[t] = values[t] / values[1];
}
return values;
}
double transform(double t) {
for (final key in values.keys)
if (key > t)
return values[key];
return values[1.0];
}
}
Run Code Online (Sandbox Code Playgroud)
Gün*_*uer 10
计算工厂构造函数中的值:
class _IntegralCurve extends Curve {
static double delta = 0.01;
factory _IntegralCurve(Curve original) {
final integral = calculateIntegral(original),
final values = calculateNormalizedValues(original);
return _IntegralCourve._(original, integral, values);
}
_IntegralCurve._(this.original, this.integral, this.values);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1749 次 |
| 最近记录: |