Javascript qx.log.appender语法
声明qx.log.appender.Native或qx.log.appender.Console时,my IDE(PyCharm)会抱怨语法:Javascript qx.log.appender语法,javascript,frameworks,qooxdoo,Javascript,Frameworks,Qooxdoo,声明qx.log.appender.Native或qx.log.appender.Console时,my IDE(PyCharm)会抱怨语法: // Enable logging in debug variant if (qx.core.Environment.get("qx.debug")) { qx.log.appender.Native; qx.log.appender.Console; } (as) 我得到的警告是 表达式语句不是赋值或调用 这是预处理器的魔力还是Jav
// Enable logging in debug variant
if (qx.core.Environment.get("qx.debug"))
{
qx.log.appender.Native;
qx.log.appender.Console;
}
(as)
我得到的警告是
表达式语句不是赋值或调用
这是预处理器的魔力还是JavaScript语法的一个特性,我还不知道
由于我的问题模棱两可,澄清如下:
我知道这是非常好的JavaScript语法。从评论中我得出结论,这里没有导致日志附加器被附加的神奇JS行为,而是一些预处理器特性
但是这是如何工作的呢?它是一个硬编码处理,还是这种语法适用于所有遵循特定约定的类
如何关闭linter警告的提示很有用,但我更想知道这个“魔法”是如何工作的这是一个有效的JS语法,所以很可能是linter/预处理器的警告(看起来类似于ESLint)
编辑: 对于问题的另一部分,此语法很可能使用or(因为这是一个新特性,所以不太可能)。MDN提供了如何在引擎盖下工作的简单示例
顺便说一句:没有“原生”JS预处理器。有一些编译器,比如
Babel
或TypeScript的编译器
,但它们是独立的项目,与普通的JavaScript无关。虽然默认情况下是法律代码,但我发现它有点难看,因为它是一个“无用的声明”(结果被忽略),除了我的编辑也抱怨这件事之外。在我的代码中,我总是将其更改为以下内容:
var appender;
appender = qx.log.appender.Native;
appender = qx.log.appender.Console;
Derrell生成器读取您的代码以确定应用程序所需的类,这样它就可以生成一个只包含最小类的优化应用程序 这两行代码是有效的Javascript语法,它们的存在是为了创建对这两个类的引用,以便生成器知道是否包含它们——如果没有它们,应用程序中就不会有任何日志记录 创建引用的另一种方法是在类注释中使用
@use
编译器提示,例如:
/**
* @use(qx.log.appender.Native)
* @use(qx.log.appender.Console)
*/
qx.Class.define("mypackage.Application", {
extend: qx.application.Standalone,
members: {
main: function() {
this.base(arguments);
this.debug("Hello world");
}
}
});
这同样有效,并且没有不寻常的语法-然而,在这个版本中,你的应用程序将始终引用那些日志附加器,而在框架中,你使用对qx.log.appender.Native/Console
的引用被if(qx.core.Environment.get(“qx.debug”){…}
这意味着在应用程序的非调试版本中,/generate.py build
通常会排除日志附加程序
你是否认为这是一件好事取决于你自己——就个人而言,这些天来,我发布的所有应用程序都启用了日志附加器,并且可以正常工作,这样,如果有人有问题,我可以查看日志(你可以编写自己的附加器,将日志发送到服务器,或者只是远程控制用户的计算机)
编辑:另一个细节是,创建类时,它可以有一个执行额外初始化的
延迟
函数-在这种情况下,生成器检测到需要qx.log.appender.Console
,以确保类已加载;然后,类“defer
方法将自身作为附加程序添加到Qooxdoo日志系统中对于JetBrains IDE(IntelliJ、PhpStorm、WebStorm、PyCharm),所谓的“检查”可以在本地关闭://noinspection BadExpressionStatementJS qx.log.appender.Native;我已编辑了对您编辑的问题的回答。下次,最好问另一个问题,而不是编辑已经回答的问题。谢谢,这是一个很好的解决方法(尽管我发现了如何在IDE中禁用警告,请参阅我对@mdziekon评论的回复)。现在我需要知道这种“魔法”在幕后是如何运作的。请参阅我原始问题的更新。