GObject.ParamFlags.CONSTRUCT_ONLY 抛出错误,除非它也是可写的

GObject.ParamFlags.CONSTRUCT_ONLY throws error unless it's also WRITABLE

我正在尝试学习 gjs 并有一些我认为是关于 ParamFlags 的基本问题。 我正在创建一个子类并尝试使用 GObject.ParamFlags.CONSTRUCT_ONLY | GObject.ParamFlags.READABLE 作为其中一个参数。用例就像它听起来的那样,只能在构建期间设置它,然后才能读取它。我这样声明:

magic_word: GObject.ParamSpec.string(
        "magic-word",
        "Magic word",
        "My magic word",
        GObject.ParamFlags.CONSTRUCT_ONLY | GObject.ParamFlags.READABLE,
        "magicword default value"
      ),

但这会在模块加载期间抛出以下错误。

GLib-GObject-CRITICAL **: 14:18:53.750: validate_pspec_to_install: assertion 'pspec->flags & G_PARAM_WRITABLE' failed

它仍然允许程序继续执行。

似乎停止此错误的唯一方法是也给它 WRITABLE 或 READWRITE 标志,并可能通过 getter/setter 实现所需的行为。但是 CONSTRUCT_ONLY 的目的似乎丢失了。我错过了什么?

G_PARAM_CONSTRUCT_ONLY表示一个属性只能在构造时设置,暗示属性必须是可写的。换句话说,CONSTRUCT_ONLY 只是对 WRITABLE.

的约束

G_PARAM_CONSTRUCT_ONLY 添加 JS 级支持的合并请求可能有助于阐明它在 GJS 中的工作原理:https://gitlab.gnome.org/GNOME/gjs/-/merge_requests/377。请记住,这是在 2020 年 11 月才合并的。