在下面的代码中,Mix_Card_Reader继承自Mix_IO_Device,后者是抽象的标记记录。
以前,它包含一个#!/usr/bin/env python3.7
import subprocess
import re
import os
def main():
output=subprocess.check_output(["ps","aux"])
output=output.decode()
print(output)
if __name__=="__main__":
main()
和两个Positive
成员。我想更改代码,使其改为使用Stream_access
个成员。
这样做的原因是,我希望这种类型的每个实例都能够在需要时打开和关闭其文件,或者在需要时完全不打开。
问题是我无法初始化此继承类型,因为File_Type
是有限类型。如何编写我的File_Type
函数以允许这样做?
.ads ...
Create_Mix_Card_Reader
.adb ...
type Mix_IO_Device is abstract tagged limited
record
Block_Size : Positive;
Input_File : File_Type;
Output_File : File_Type;
end record;
type Mix_Card_Reader is new Mix_IO_Device with null record;
GNAT抱怨我不能将 function Create_Mix_Card_Reader return Mix_IO_Device_access is
Ret : Mix_IO_Device_access := new Mix_Card_Reader'(16,null,null);
begin
return Ret;
end Create_Mix_Card_Reader;
传递给成对的null,null
成员,因为它们当然不兼容,空值是以前有{{1}时的剩余值}成员。似乎我必须在这里传递一些信息,但我不想过早地打开文件只是为了使编译器满意。
该怎么办?
编辑: 我有几个明显的选择:
- 改为使用
File_Type
(但我仍然必须在其他位置保持文件的打开/关闭)。 - 将所有File_Type对象分别存储在一个数组中,并像以前一样使用Streams对其进行引用,但这似乎很麻烦。