我正在设计一个简单的 gnome shell 扩展,在 gnome shell repo 的HACKING.md
中,它说我们应该使用new Lang.Class()
语言框架来初始化一个类。
但是,当我检查官方的 gnome-shell 扩展存储库示例时,每个扩展都使用 es6 类语法,而不是new Lang.Class()
。
所以,我的问题是:我应该使用 es6 类语法进行 shell 扩展并使用new Lang.Class()
框架来贡献 gnome-shell 本身吗?另外,我在哪里可以获得有关 gnome-shell 是什么架构以及我可以使用的完整 API 的更多信息?我搜索谷歌,所有信息似乎都坏了或过时了,这对像我这样天真的家伙来说非常失望。
谢谢。
https://gitlab.gnome.org/GNOME/gnome-shell/issues/530#note_308621
以下是 gnome-shell 开发人员的答案:
所以,我的问题是:我应该使用 es6 类语法进行 shell 扩展并使用新的 Lang.Class(( 框架来贡献 gnome-shell 本身吗?
目前:是的。
gjs 中对 ES6 类的支持仍然相对较新,这就是为什么你仍然会发现以前使用的 Lang.Class 框架有很多用途。在 gnome-shell 的情况下,扩展的形式还有一个额外的复杂性:
const Lang = imports.lang;
const Foo = new Lang.Class({
Name: 'Foo'
});
// this works
class Bar extends Foo {}
class Baz {}
// this doesn't
var Quz = new Lang.Class({
Name: 'Quz',
Extends: Baz
});
计划当然是移植 gnome-shell 以使用 ES6 类,但它会破坏所有仍然使用 Lang.Class 从 gnome-shell 中定义的类继承的扩展。所以这不是我们应该逐渐潜入的东西,而是一个明确的开关,有足够的回旋余地让扩展开发人员在必要时调整他们的代码(我希望在 3.32 周期的早期选择一个本地分支,所以敲木头(。
所以TL;博士:
新的应用程序或扩展应该明确使用 ES 6 类,我会建议现有应用程序的开发人员认真考虑移植。
更一般地说:使用问题跟踪器作为支持论坛是非常无效的,因为当问题关闭时,任何答案都会变得模糊不清,因此除了最初的"报告者"之外,可能没有人能从中受益。这使得开发人员时间的使用相当糟糕(而不是花在解决实际问题上(。