为什么Dart中最终字段的初始化错误?

问题描述 投票:3回答:2

我有一个带有两个final字段的简单类,其中一个是存储数据的映射,另一个是调用时更新数据的step函数:

class Data
{

  //for each name a list of observations
  final Map<String,List<double>> _dataMap;

  /**
   * the update step
   */
  final Step _updateStep;

Step只是一个typedef

现在,我想要一个具有一个参数的构造函数:一个接受引用Map<...>并返回一个新的Step的函数。这对我来说似乎是合乎逻辑的,更新程序需要引用地图来更新它。

为什么这个构造函数失败了?

  Data(Step initializer(Map<String,List<double>> dataReferences))
  : _dataMap = new Map(),
  _updateStep = initializer(_dataMap);

错误发生在第二步

非法隐含访问接收者'this';

什么?这是怎么泄漏的?怎么解决?

constructor dart final
2个回答
6
投票

GünterZöchbauer已经解释了您的错误原因。

这是一个解决方法:

Data(Step initializer(Map<String,List<double>> dataReferences))
  : this._internal(initializer, new Map());

Data._internal(initializer, map)
  : _dataMap = map,
    _updateStep = initializer(map);

3
投票

您正在阅读_dataMapinitializer(_dataMap))。 _datamapthis的一个领域,它不是一个论据。您无法在构造函数初始值设定项中读取“this”中的字段,如错误消息所示。

© www.soinside.com 2019 - 2024. All rights reserved.