Nim元组定义中如何引用内部字段?是否需要RTTI?
元组定义中引用同元组字段的实现方案
Delphi的元组初始化逻辑和C语言数组不同,元组内部的字段在初始化阶段无法直接互相引用——因为元组对象本身还未完成创建,解析器不会将字段名识别为已声明的标识符,这就是你触发undeclared identifier x报错的原因。
不需要借助RTTI实现这类需求,以下是几种更直接高效的方案:
分步初始化:先创建元组并初始化基础字段,再补充依赖字段的值
var a: record x: Integer; y: Integer end; begin a.x := 10; a.y := a.x + 10; end;若是使用匿名元组,同样可以拆分为两步:
var a := (x: 10, y: 0); // 先给y设占位值 begin a.y := a.x + 10; end;使用临时变量中转:把需要复用的字段值先存入临时变量,再代入元组初始化
var tempX := 10; a := (x: tempX, y: tempX + 10);自定义辅助函数封装逻辑:如果这类初始化需求频繁,可编写返回元组的函数,在函数内部处理字段依赖
function CreateTuple(const x: Integer): record x, y: Integer end; begin Result.x := x; Result.y := x + 10; end; // 调用示例 var a := CreateTuple(10);
RTTI是用于运行时获取类型信息的机制,用它处理初始化不仅绕路,还会引入不必要的性能开销,完全没必要。上述方案均为编译时即可完成的逻辑,简洁且高效。
内容的提问来源于stack exchange,提问作者Marcello Presulli
相关产品推荐
相关产品推荐

