如何在 ada 中打印通用类型?
How to print a generic type in ada?
我目前正在尝试打印 ("Ada.Text_IO.Put") 通用类型,但这总是失败并出现如下错误:
missing argument for parameter "Item" in call to "Put" declared at a-tiinio.ads:60, instance at a-inteio.ads:18
expected type "Standard.Integer"
found private type "My_Type" defined at testtype.ads:2
这些错误是有道理的,但我不知道如何打印我的值。
以下几行显示了我的通用类型。
generic
type My_Type is private;
with function "+"(Left: My_Type; Right: My_Type) return My_Type;
package TestType is
...
end TestType;
感谢您的帮助!
您可以要求另一个通用参数,例如:
with function image(Item : in My_Type) return String;
然后简单地打印Image函数输出的字符串。
实际参数的示例可能是:
image => Integer'Image
泛型的意义在于 "it" 适用于任何类型,而 Text_IO
的意义在于它适用于调用其子程序时已知的类型,即字符串,您需要其他泛型用于打印任何类型。因此,要么传递一个从您的类型转换为 String
的特殊函数,如 所回答。或者,将通用正式包与 My_Type 一起传递以进行打印。例如。
generic
type Any_Type is private;
package Any_Type_IO is
procedure Put (Item : Any_Type);
procedure Get (Item : out Any_Type);
end Any_Type_IO;
with Any_Type_IO;
generic
type My_Type is private;
with function "+"(Left: My_Type; Right: My_Type) return My_Type;
with package Printer is new Any_Type_Io (Any_Type => My_Type);
package TestType is
procedure Run_Test;
end TestType;
因此,随着类型成为 TestType
的通用实际类型,将有一个包成为 TestType
的通用实际包。他们匹配。在 TestType
的实例中,您可以将它们一起使用。
type T is range 1 .. 10;
package T_IO is new Any_Type_IO (T);
package My_Test_Instance is new TestType
(My_Type => T,
"+" => "+",
Printer => T_IO);
如果您提供了一个打印包,例如 Any_Type_IO,那么打印在两种意义上都变成了通用的:它是任何匹配的打印包的工作,而且它还必须匹配 Ada 意义上的通用正式包.
我目前正在尝试打印 ("Ada.Text_IO.Put") 通用类型,但这总是失败并出现如下错误:
missing argument for parameter "Item" in call to "Put" declared at a-tiinio.ads:60, instance at a-inteio.ads:18
expected type "Standard.Integer"
found private type "My_Type" defined at testtype.ads:2
这些错误是有道理的,但我不知道如何打印我的值。 以下几行显示了我的通用类型。
generic
type My_Type is private;
with function "+"(Left: My_Type; Right: My_Type) return My_Type;
package TestType is
...
end TestType;
感谢您的帮助!
您可以要求另一个通用参数,例如:
with function image(Item : in My_Type) return String;
然后简单地打印Image函数输出的字符串。
实际参数的示例可能是:
image => Integer'Image
泛型的意义在于 "it" 适用于任何类型,而 Text_IO
的意义在于它适用于调用其子程序时已知的类型,即字符串,您需要其他泛型用于打印任何类型。因此,要么传递一个从您的类型转换为 String
的特殊函数,如
generic
type Any_Type is private;
package Any_Type_IO is
procedure Put (Item : Any_Type);
procedure Get (Item : out Any_Type);
end Any_Type_IO;
with Any_Type_IO;
generic
type My_Type is private;
with function "+"(Left: My_Type; Right: My_Type) return My_Type;
with package Printer is new Any_Type_Io (Any_Type => My_Type);
package TestType is
procedure Run_Test;
end TestType;
因此,随着类型成为 TestType
的通用实际类型,将有一个包成为 TestType
的通用实际包。他们匹配。在 TestType
的实例中,您可以将它们一起使用。
type T is range 1 .. 10;
package T_IO is new Any_Type_IO (T);
package My_Test_Instance is new TestType
(My_Type => T,
"+" => "+",
Printer => T_IO);
如果您提供了一个打印包,例如 Any_Type_IO,那么打印在两种意义上都变成了通用的:它是任何匹配的打印包的工作,而且它还必须匹配 Ada 意义上的通用正式包.