为什么不能编译这个简单的Dart代码?

时间:2013-06-29 01:48:23

标签: dart

这是一些简单的Dart代码:

class P {
  var name = myname();

  String myname() => "PPP";
}

main() {
  new P();
}

运行时报告此错误:

Error: line 2 pos 14: illegal implicit access to receiver 'this'
  var name = myname();
             ^

导致此错误的原因是什么?

1 个答案:

答案 0 :(得分:3)

您正在尝试在静态上下文中评估非静态方法(请参阅注释)。您可以将方法标记为static

class P {
  var name = myname();

  static String myname() => "PPP";
}

或者在非静态上下文中评估代码:

class P {
  var name;

  P() {name = myname();}

  static String myname() => "PPP";
}

注意:这里的“静态背景”的概念是我的心理模型,它可能与Dart的工作原理完全匹配,也可能不完全匹配。可能更为正确的是,this在字段初始值设定项中无法显式或隐式显示。