尝试将旧的 pascal 脚本翻译成 python:pascal 问题 "record"
Trying to translate an old pascal script to python: problems with pascal "record"
我目前的任务是将旧的 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
是长度为 i-1 的 MeasurementPoint
类型的对象吗?或者那部分是什么意思?为什么 lambda
和 value
被提取为 temp.lambda
和 temp.value
?这会在记录中自动将它们配对吗...?
如果有人能帮我解释一下,我将不胜感激。当然,如果您碰巧知道如何将其翻译成 python 3.x,那就更好了 ;-)
Pascal 的 record
就像 Python 的 namedtuple
。在 readLn
函数中逐字段读取一条记录 (namedtuple)(因此 temp.lambda
、temp.value
)。
Reflexion[i-1]:=temp
看起来像一个记录数组(Python 的 list
)。由于数组具有恒定长度(在初始化时声明;n-1
),新记录存储在连续的槽中。
我希望这能回答您有关 Pascal 代码功能的问题...
我目前的任务是将旧的 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
是长度为 i-1 的 MeasurementPoint
类型的对象吗?或者那部分是什么意思?为什么 lambda
和 value
被提取为 temp.lambda
和 temp.value
?这会在记录中自动将它们配对吗...?
如果有人能帮我解释一下,我将不胜感激。当然,如果您碰巧知道如何将其翻译成 python 3.x,那就更好了 ;-)
Pascal 的 record
就像 Python 的 namedtuple
。在 readLn
函数中逐字段读取一条记录 (namedtuple)(因此 temp.lambda
、temp.value
)。
Reflexion[i-1]:=temp
看起来像一个记录数组(Python 的 list
)。由于数组具有恒定长度(在初始化时声明;n-1
),新记录存储在连续的槽中。
我希望这能回答您有关 Pascal 代码功能的问题...