我试图编写一些基于Love2d框架的游戏,该框架是从moonscript编译而来的。每当我在代码中出错时,我的应用程序都会引发错误,并且此错误是指已编译的lua代码,而不是月亮脚本,因此我不知道此错误的确切位置。请告诉我,在这种情况下有什么解决方案?谢谢。
答案 0 :(得分:1)
几乎任何源到源编译系统的调试都是一个问题。目标语言不知道原始语言是否存在,因此只能用目标语言来谈论事物。目标语言和原始语言越多样化,调试就越困难。
这是C ++编译器不再编译为C的大部分原因。
处理此问题的唯一真实方法是,熟悉Moonscript编译器从您的Moonscript代码生成Lua的方式。学习Lua并仔细阅读输出Lua,并将其与给定的Moonscript进行比较。这样可以使您更轻松地将给定的Lua错误和源代码映射到创建该错误的实际Moonscript代码。
答案 1 :(得分:1)
Moonscript确实支持源映射/错误重写,但仅在moon
解释器:https://moonscript.org/reference/command_line.html#error_rewriting
我认为可以在另一个lua环境中启用它,但是我不确定要涉及到什么。
这肯定会要求moonscript保留在编译期间创建的源映射表,因此您不能使用moonc
;而是使用moonscript
模块即时编译所需的模块:
main.lua
-- attempt to require moonscript,
-- for development
pcall(require, 'moonscript')
-- load the main file
require 'init'
init.moon
love.draw = ->
print "test"
正确安装此代码和moonscript后,您可以照常使用love .
运行项目。 require 'moonscript'
调用将更改require
,以便即时编译moonscript模块。性能损失可以忽略不计,并且在加载所有模块之后没有区别。