为什么可以';这个简单的Dart代码不能编译吗?

为什么可以';这个简单的Dart代码不能编译吗?,dart,Dart,下面是一些简单的Dart代码: P类{ var name=myname(); 字符串myname()=>“PPP”; } main(){ 新P(); } 它在运行时报告此错误: Error: line 2 pos 14: illegal implicit access to receiver 'this' var name = myname(); ^ 错误:第2行位置14:非法隐式访问接收器“this” var name=myname(); ^ 导致此错误的原因是

下面是一些简单的Dart代码:

P类{
var name=myname();
字符串myname()=>“PPP”;
}
main(){
新P();
}
它在运行时报告此错误:

Error: line 2 pos 14: illegal implicit access to receiver 'this' var name = myname(); ^ 错误:第2行位置14:非法隐式访问接收器“this” var name=myname(); ^
导致此错误的原因是什么?

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

P类{
var name=myname();
静态字符串myname()=>“PPP”;
}
或在非静态上下文中评估代码:

P类{
变量名;
P(){name=myname();}
静态字符串myname()=>“PPP”;
}

注意:这里的“静态上下文”概念是我的心智模型,它可能与Dart的工作方式完全匹配,也可能不匹配。请注意,
这个
在字段初始值设定项中是不可用的,无论是显式的还是隐式的。

您试图在静态上下文中计算非静态方法(请参见注释)。您可以将该方法标记为
静态

P类{
var name=myname();
静态字符串myname()=>“PPP”;
}
或在非静态上下文中评估代码:

P类{
变量名;
P(){name=myname();}
静态字符串myname()=>“PPP”;
}

注意:这里的“静态上下文”概念是我的心智模型,它可能与Dart的工作方式完全匹配,也可能不匹配。请注意,
这个
在字段初始值设定项中是不可用的,无论是显式的还是隐式的。

这与Java有很大不同,为什么dart有这个限制?@Freewind我不能说。如果你真的好奇的话,可以在谷歌群组论坛上询问。有很多限制可以避免在初始化时运行任意代码。据我所知,目标是使初始化安全(您无法访问部分构建对象)和快速。这与Java有很大不同,为什么dart有这个限制?@Freewind我不能说。如果你真的好奇的话,可以在谷歌群组论坛上询问。有很多限制可以避免在初始化时运行任意代码。据我所知,目标是使初始化安全(您无法访问部分构建对象)和快速。@DarshanComputing,非常感谢您纠正我的错误!没问题!我们都是来帮忙的。@DarshanComputing,非常感谢你纠正我的错误!没问题!我们都是来帮忙的。