Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用Scala.js为Screep生成逻辑时,如何解决此错误?_Scala_Screeps_Scala.js - Fatal编程技术网

在使用Scala.js为Screep生成逻辑时,如何解决此错误?

在使用Scala.js为Screep生成逻辑时,如何解决此错误?,scala,screeps,scala.js,Scala,Screeps,Scala.js,我试图使用Scala.js为screep生成逻辑,但在尝试导入生成的javascript代码时遇到以下错误: TypeError: Cannot read property 'Object' of undefined at eval:1:358 at screeplogic:45:322 at m:4:3096 at console:45 at Object.c.runCode:4:6811 首先,我创建了一个简单的Scala.js项目: 然后,我将我的screep帐户链接到该回购协议,使用

我试图使用Scala.js为screep生成逻辑,但在尝试导入生成的javascript代码时遇到以下错误:

TypeError: Cannot read property 'Object' of undefined
at eval:1:358
at screeplogic:45:322
at m:4:3096
at console:45
at Object.c.runCode:4:6811
首先,我创建了一个简单的Scala.js项目:

然后,我将我的screep帐户链接到该回购协议,使用“生成”文件夹作为链接文件夹导入游戏


要获得该错误,我启动一个自定义模拟,然后在screep控制台中执行一个简单的
require(“screeplogic”)

堆栈跟踪表明错误不在Screeps代码中,而是在您的代码中:

TypeError: Cannot read property 'Object' of undefined
at eval:1:358
at screeplogic:45:322  <-- here it is
但是在模拟模式下,全局上下文不存储在
this
中,因此调用失败。如果显式传递
global
变量,则一切似乎都正常工作:

(function() { ....... }).call(global);

IIUC,你正在Scala.js中创建node.js模块?我不能肯定,但我怀疑screep游戏引擎完全是在node中构建的,因此有理由认为我上传的代码(一个完整的Scala.js文件)正在被节点中的eval调用解析。另外,指向screep游戏的链接在这里:我与Screeps没有关系,但是如果我不得不猜测,我怀疑可能涉及到这个节点模块:在所有情况下,该transpiler的输出都应该是
this
,包括在
global
是全局范围的节点式环境中。(我知道是因为我写了它。)它做的第一件事就是找出全局作用域是什么:它应该检测
全局
情况。它在vanilla Node.js实例中工作得很好(我们在CI中对此进行了测试)。在尖叫环境中似乎有一些奇怪的东西使得这个逻辑有缺陷,但是什么呢?我不知道。我继续并手动将建议的更改应用到生成的javascript,只是想看看是否可以让它工作,它确实。。。某物我写了一个快速测试页面来检查生成的代码做了什么,而且它确实生成了一个“module.exports”,在本例中,它应该是一个函数。。。然而,在screeps land中,虽然不再抛出错误,但Require(“screepslogic”)返回一个对象。。我一辈子都搞不清楚那个对象的键是什么。编辑:另外,我的理解是,require(“screepslogic”)将返回定义为“module.exports”的任何内容。我尝试的另一件事是通过删除最后一个“.call”(这个)手动编辑生成的源代码'并将module.exports添加到脚本的开头,使其看起来像module.exports=(function(){…}),这也会。。。某物似乎调用方法是在这个新事物上定义的,但是确实需要(“screeplogic”).call(全局)在screep脚本/控制台模式下返回undefined。Screeps有两种运行时模式-服务器端,意味着在Node.js下运行,模拟仅在浏览器中运行。因此,此传输代码在上载到服务器时可以正常工作,但在浏览器中运行时会中断,因为
this==undefined
(function() { ....... }).call(global);