= 3.0 中。为了兼容性,我的代码目前在设置“license-type”属性之前会检-6ren">
gpt4 book ai didi

lua - 有没有办法在不检查版本号的情况下检查 GTK 小部件是否支持属性?

转载 作者:行者123 更新时间:2023-12-04 18:20:06 25 4
gpt4 key购买 nike

根据 GTK API 引用,"license-type" GtkAboutDialog 的属性仅存在于 GTK >= 3.0 中。为了兼容性,我的代码目前在设置“license-type”属性之前会检查 GTK 版本:

-- This is Lua code binding to GTK via lgi
local dialog = Gtk.AboutDialog {
title = "About Me",
-- ...,
}
if Gtk.check_version(3,0,0) == nil then
dialog.license_type = Gtk.License.MIT_X11
end

除了这样做,有没有办法直接询问 GTK 小部件是否支持某个属性?我认为如果我可以编写一些看起来像这样的代码,那么代码会更加自文档化并且更不容易出错

if supports_property(dialog, "license-type") then
dialog.license_type = Gtk.License.MIT_X11
end

因为这个问题实际上是关于 GTK API 的,所以我可以接受任何编程语言的答案。尽管示例是在 Lua 中,但我认为类似的问题应该出现在其他动态语言绑定(bind)甚至 C 中,假设有一种方法可以按名称设置属性而无需通过 set_license_type 访问器功能。

最佳答案

您不需要像在 currently accepted answer 中那样使用 _property 字段。因为 lgi 直接在类型类别表中查找所有名称。此外,还可以使用 _type 访问器获取实例的类型。所以我推荐以下解决方案:

if dialog._type.license_type then
dialog.license_type = Gtk.License.MIT_X11
end

关于lua - 有没有办法在不检查版本号的情况下检查 GTK 小部件是否支持属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38642464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com