我目前的任务是将旧的 pascal 脚本翻译成 python。问题是,我对 pascal 没有任何经验......直到现在,一切都很好(大部分脚本都是不言自明的),但现在我遇到了一小段代码,我只是想不通出去:# some other code here...type MeasurementPoint = record lambda : double; value : double; end;# some more code...procedure foo(MyFileName: string, somemoreargs):var somevars: integer; somemorevars: double; temp: MeasurementPoint; # even more code... i:= 0; Assign(MyInFile,MyFileName); Reset(MyInFile); repeat Inc(i); SetLength(Reflexion, i); readln(MyInFile, temp.lambda, temp.value); Reflexion[i-1]:=temp; until EoF(MyInFile); Close(MyInFile);我只是无法理解这部分代码应该做什么......我非常理解MyInFile正在逐行读取完整文件,并且每行包含两个值,即'lambda'和'value',它们被提取作为双打。根据 pascal wiki,record容器是否能够容纳不同类型的对象并在逻辑上将它们组合在一起(这可以与 python 中的字典进行比较吗?)。如果我理解SetLength正确,它用于定义数组的长度,这在这里很有意义。i每次读取一行时都会增加,因此temp增加的长度以适应已从文件中提取的lambda和value对的数量(如果我的假设错误,请纠正我!)。但我不明白其余的代码应该做什么,尤其是Reflexion[i-1]:=temp. 是长度为 i-1Reflexion的类型的对象MeasurementPoint吗?或者那部分是什么意思?为什么lambda和value提取为temp.lambda和temp.value? 这是否会自动将它们配对在记录中......?如果有人可以通过解释这一点来帮助我,我将不胜感激。而且,当然,如果您碰巧知道如何将其转换为 python 3.x,那就更好了 ;-)
1 回答

千巷猫影
TA贡献1829条经验 获得超7个赞
Pascal 的record
就像 Python 的namedtuple
. 一个记录(namedtuple )在函数中被逐个字段读取(因此temp.lambda
, temp.value
)readLn
。
Reflexion[i-1]:=temp
看起来像一个list
记录数组(Python 的)。由于数组具有恒定长度(在初始化时声明;n-1
),因此新记录存储在连续的槽中。
我希望这能回答您关于 Pascal 代码功能的问题...
添加回答
举报
0/150
提交
取消