我目前的任务是将旧的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
。 Reflexion
是类型为MeasurementPoint
且长度为i-1的对象吗?或那部分是什么意思?为什么将lambda
和value
提取为temp.lambda
和temp.value
?会自动将它们配对成一条记录吗??
如果有人可以通过解释帮助我,我将不胜感激。而且,当然,如果您碰巧知道如何将其转换为python 3.x,那就更好了;-)
答案 0 :(得分:1)
Pascal的record
就像Python的namedtuple
一样。在temp.lambda
函数中逐字段(因此temp.value
,readLn
)读取一条记录(命名元组)。
Reflexion[i-1]:=temp
看起来像一个记录数组(Python的list
)。由于数组具有恒定的长度(在初始化时声明; n-1
),因此新记录将存储在连续的插槽中。
我希望这能回答您有关Pascal代码的作用的问题...