gpt4 book ai didi

dart - 静态最终对象更改身份

转载 作者:行者123 更新时间:2023-12-03 03:43:00 26 4
gpt4 key购买 nike

我有一个用Dart编写的浏览器应用程序。我注意到在我的StageXL ResourceManager缺少以前拥有的资源的地方出现了一个奇怪的错误。调试了一段时间之后,我最终遇到了这种情况:

在global.dart中:

class Global {
static final ResourceManager resourceManager = new ResourceManager();
}

在主要功能中:
var resources = Global.resourceManager;
resources.addBitmapData("Player", "images/player_base.png");
await resources.load();
print("in main: ${identityHashCode(Global.resourceManager)} = "
" ${Global.resourceManager.resources}, isolate: ${identityHashCode(
Isolate.current)}");

在另一个需要随后访问资源的函数中:
print("elsewhere: ${identityHashCode(Global.resourceManager)} = "
" ${Global.resourceManager.resources}, isolate: ${identityHashCode(
Isolate.current)}");

预期的输出(identityHashCodes匹配,对象内容也匹配):
in main: 12345678 = [ResourceManagerResource [kind=BitmapData, name=Player, 
url = images/player_base.png]], isolate: 09876543
elsewhere: 12345678 = [ResourceManagerResource [kind=BitmapData,
name=Player, url = images/player_base.png]], isolate: 09876543

实际输出(请注意identityHashCode不匹配):
in main: 516570559 = [ResourceManagerResource 
[kind=BitmapData, name=Player, url = images/player_base.png]],
isolate: 843028171
elsewhere: 419835243 = [], isolate: 843028171

我认为这可能与在其他隔离环境(不熟悉它们)中运行有关,但是如您所见,当前隔离环境的identityHashCodes匹配。

最佳答案

令人惊讶。我最好的猜测是,您使用不同的URI两次导入相同的库。您的文件之一是“主”文件这一事实支持了这一点,因为将命令行上的主文件指定为文件并使用相对引用导入软件包库是一个常见错误。

您的“主”文件是否在lib包目录中,并且是否使用相对路径导入资源文件?如果是这样,请尝试将该导入更改为package:packageName/thepath URI,然后查看它是否进行了任何更改。

(我个人的建议是,无论是在导入/导出中还是在命令行中,都不要拥有包含lib的Dart库URL。在这种情况下,请始终使用package: URI。)

关于dart - 静态最终对象更改身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48854095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com