如何在GDScript中实现带类型约束的嵌套结构?
解决GDScript嵌套结构实现问题
一、正确的嵌套字典实现
你之前的字典写法错误在于GDScript的字典键值对必须用:分隔,而非=,嵌套字典同样遵循该语法规则:
# 可正常运行的嵌套字典 var struct = { foo: 1, nested: { bar: 2 } }
后续需要修改值时,直接通过键访问赋值:
struct.foo = 3 struct.nested.bar = 4
二、带类型约束的类实现(支持外部赋值)
你之前的类写法存在两个核心问题:
- GDScript中不存在
Number类型,需根据实际场景使用int(整数)或float(浮点数); - 使用
static变量会让所有类实例共享同一个值,若要支持外部为每个实例单独赋值,必须使用实例变量,且嵌套类需要先实例化才能访问其成员。
正确的实现代码如下:
class Struct: var foo: int # 若需浮点型则改为 float var inner: Inner # 声明嵌套类的类型 # 构造函数,初始化嵌套类实例 func _init(): inner = Inner.new() class Inner: var bar: int # 同理可改为 float
使用时需先实例化外部类,再进行变量赋值或访问:
var my_struct = Struct.new() my_struct.foo = 5 # 外部给顶层变量赋值 my_struct.inner.bar = 6 # 给嵌套类的变量赋值
若部分变量无需初始值,仅声明类型即可,GDScript会自动赋予对应类型的默认值(整数默认0、浮点数默认0.0、对象默认null),后续可通过外部操作随时赋值。
内容的提问来源于stack exchange,提问作者Seph Reed
相关产品推荐
相关产品推荐

