qx.log.appender 语法
qx.log.appender Syntax
当声明 qx.log.appender.Native 或 qx.log.appender.Console 时,我的 IDE (PyCharm) 抱怨语法:
// Enable logging in debug variant
if (qx.core.Environment.get("qx.debug"))
{
qx.log.appender.Native;
qx.log.appender.Console;
}
我得到的警告是
Expression statement is not assignment or call
这个预处理器是神奇的还是我还不知道的 JavaScript 语法的一个特性?
澄清一下我的问题不明确:
我知道这是非常好的 JavaScript 语法。从评论中我得出结论,这不是导致附加日志附加程序的神奇 JS 行为,而是一些预处理器功能?!
但是这是如何工作的呢?它是硬编码处理还是此语法适用于所有遵循特定约定的 类?
如何关闭 linter 警告的提示很有用,但我更想知道这个 "magic" 是如何工作的
这是一个有效的 JS 语法,所以很可能是 linter's/preprocessor 的警告(看起来类似于 ESLint 的 no-unused-expressions
)。
编辑:
对于问题的另一部分 - 此语法最有可能使用 getters
or (rather unlikely as it is a new feature) Proxies
。 MDN 提供了一些简单的例子来说明它是如何工作的。
顺便说一句:没有“原生”JS 预处理器这样的东西。有像 Babel
或 TypeScript's compiler
这样的编译器,但它们是独立的项目,与 vanilla JavaScript.
无关
虽然默认情况下是合法代码,但我发现它有点难看,因为它是 "useless statement"(结果被忽略),除了我的编辑也抱怨它之外。在我的代码中,我总是把它改成这样:
var appender;
appender = qx.log.appender.Native;
appender = qx.log.appender.Console;
德雷尔
生成器读取您的代码以确定您的应用程序需要哪些 classes,以便它可以生成仅具有最少 classes 的优化应用程序。
这两行是有效的 Javascript 语法,并且存在是为了创建对两个 class 的引用,以便生成器知道包含它们 - 没有它们,你不会在您的应用程序中进行任何登录。
另一种创建引用的方法是在 class 注释中使用 @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
版本中,通常会排除日志附加程序。
你是否认为这是一件好事取决于你 - 就个人而言,这些天我发布所有应用程序时都启用了日志附加程序并正常工作,这样如果有人有问题我可以查看日志(你可以编写自己的 appender 将日志发送到服务器,或者只是远程控制用户的计算机)
编辑:另一个细节是,当创建 class 时,它可以有一个 defer
函数来进行额外的初始化——在这种情况下,生成器检测到 qx.log.appender.Console
是需要它确保 class 已加载; class' defer
方法然后将自己作为附加程序添加到 Qooxdoo 日志系统
当声明 qx.log.appender.Native 或 qx.log.appender.Console 时,我的 IDE (PyCharm) 抱怨语法:
// Enable logging in debug variant
if (qx.core.Environment.get("qx.debug"))
{
qx.log.appender.Native;
qx.log.appender.Console;
}
我得到的警告是
Expression statement is not assignment or call
这个预处理器是神奇的还是我还不知道的 JavaScript 语法的一个特性?
澄清一下我的问题不明确:
我知道这是非常好的 JavaScript 语法。从评论中我得出结论,这不是导致附加日志附加程序的神奇 JS 行为,而是一些预处理器功能?!
但是这是如何工作的呢?它是硬编码处理还是此语法适用于所有遵循特定约定的 类?
如何关闭 linter 警告的提示很有用,但我更想知道这个 "magic" 是如何工作的
这是一个有效的 JS 语法,所以很可能是 linter's/preprocessor 的警告(看起来类似于 ESLint 的 no-unused-expressions
)。
编辑:
对于问题的另一部分 - 此语法最有可能使用 getters
or (rather unlikely as it is a new feature) Proxies
。 MDN 提供了一些简单的例子来说明它是如何工作的。
顺便说一句:没有“原生”JS 预处理器这样的东西。有像 Babel
或 TypeScript's compiler
这样的编译器,但它们是独立的项目,与 vanilla JavaScript.
虽然默认情况下是合法代码,但我发现它有点难看,因为它是 "useless statement"(结果被忽略),除了我的编辑也抱怨它之外。在我的代码中,我总是把它改成这样:
var appender;
appender = qx.log.appender.Native;
appender = qx.log.appender.Console;
德雷尔
生成器读取您的代码以确定您的应用程序需要哪些 classes,以便它可以生成仅具有最少 classes 的优化应用程序。
这两行是有效的 Javascript 语法,并且存在是为了创建对两个 class 的引用,以便生成器知道包含它们 - 没有它们,你不会在您的应用程序中进行任何登录。
另一种创建引用的方法是在 class 注释中使用 @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
版本中,通常会排除日志附加程序。
你是否认为这是一件好事取决于你 - 就个人而言,这些天我发布所有应用程序时都启用了日志附加程序并正常工作,这样如果有人有问题我可以查看日志(你可以编写自己的 appender 将日志发送到服务器,或者只是远程控制用户的计算机)
编辑:另一个细节是,当创建 class 时,它可以有一个 defer
函数来进行额外的初始化——在这种情况下,生成器检测到 qx.log.appender.Console
是需要它确保 class 已加载; class' defer
方法然后将自己作为附加程序添加到 Qooxdoo 日志系统