Javascript GObject.ParamFlags.CONSTRUCT#u仅抛出错误,除非它';它也是可写的

Javascript GObject.ParamFlags.CONSTRUCT#u仅抛出错误,除非它';它也是可写的,javascript,gnome,gobject,gjs,Javascript,Gnome,Gobject,Gjs,我正在努力学习gjs,我有几个问题,我认为这些问题是关于gjs的基本问题。 我正在创建一个子类,并尝试对其中一个参数使用GObject.paramlags.CONSTRUCT|GObject.paramlags.READABLE。用例就是它听起来的样子,只能在构建过程中设置它,然后才能阅读它。我是这样宣布的: magic_word: GObject.ParamSpec.string( "magic-word", "Magic word

我正在努力学习gjs,我有几个问题,我认为这些问题是关于gjs的基本问题。 我正在创建一个子类,并尝试对其中一个参数使用
GObject.paramlags.CONSTRUCT|GObject.paramlags.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实现所需的行为。但这样看来,构建_的目的似乎就失去了。我缺少什么?

G_PARAM_CONSTRUCT_ONLY
表示只能在构造期间设置属性,这意味着该属性必须是可写的。换句话说,
CONSTRUCT\u ONLY
只是对
writeable
的一个约束


合并请求仅为
G_PARAM_CONSTRUCT_添加JS级支持可能有助于澄清这在GJS中是如何工作的。请记住,这是在2020年11月才合并的。

啊!这是有道理的。因此,在未来,它将按照文档“建议”的方式运行。一般来说,在同时学习gtk/gjs的过程中,似乎有很多这样的小“陷阱”,而事先不知道这两者。无论如何,这条线回答了我的问题。谢谢是的,将来它应该像广告宣传的那样工作。也许这不是一个优先事项,因为GJS很少用于编写公共API,通常只是C API的消费者,但是如果需要,您可以自己强制执行规则。