在声明qx.log.appender.Native或qx.log.appender.Console时,my (PyCharm)抱怨语法:
// Enable logging in debug variant
if (qx.core.Environment.get("qx.debug"))
{
qx.log.appender.Native;
qx.log.appender.Console;
}(作为记录在这里)
我得到的警告是
表达式语句不是赋值或调用。
这是预处理器的魔力还是JavaScript语法的一个特性,我还不知道呢?
由于我的问题含糊不清,所以作出澄清:
我知道这是非常好的JavaScript语法。从评论中我得出结论,这里没有神奇的JS行为会导致日志添加程序被附加,而是一些预处理器特性?!
但这是如何运作的呢?这是硬编码的处理,还是这种语法适用于所有遵循特定约定的类?
提示如何关闭linter警告是有用的,但我更想知道这种“魔法”是如何工作的。
发布于 2016-09-20 12:22:02
尽管默认情况下是法律代码,但我发现它有点丑陋,因为它是“无用的语句”(结果被忽略),除了我的编辑也抱怨这个事实之外。在我的代码中,我总是将它更改为如下所示:
var appender;
appender = qx.log.appender.Native;
appender = qx.log.appender.Console;德雷尔
发布于 2016-09-21 07:39:45
生成器读取您的代码以确定您的应用程序需要哪些类,这样它就可以生成一个只有最小类的优化应用程序。
这两行是有效的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版本中,日志添加程序通常会被排除在外。
您是否认为这是一件好事,这取决于您-就个人而言,这些天,我交付所有的应用程序与日志添加程序启用和工作,以便如果有人有问题,我可以查看日志(您可以编写您自己的附录发送日志到服务器,或只是远程控制用户的计算机)
编辑:另一个细节是,当创建一个类时,它可以有一个执行额外初始化的defer函数--在本例中,生成器需要检测qx.log.appender.Console,因此它确保了类的加载;然后类的defer方法将自己作为一个附录添加到了does日志记录系统中。
https://stackoverflow.com/questions/39593709
复制相似问题