如何检查一个元素属于哪个子类型?

9

我刚学习了Ada语言中的枚举和类型,并决定写一个小程序练习:

with Ada.Text_IO;                       use Ada.Text_IO;
with Ada.Integer_Text_IO;       use Ada.Integer_Text_IO;

procedure Day is 

    type Day_Of_The_Week is (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);

    subtype Weekday is Day_Of_The_Week range Monday..Friday;

    subtype Weekend is Day_Of_The_Week range Saturday..Sunday;

        function is_Weekday ( dayOfTheWeek: in Day_Of_The_Week) return Boolean is
        begin
            if(--?--)
        end is_Weekday;

    selected_day_value  :   Integer;
    selected_day                :   Day_Of_The_Week;

begin
    Put_Line("Enter the number co-responding to the desired day of the week:");
    Put_Line("0 - Monday");
    Put_Line("1 - Tuesday");
    Put_Line("2 - Wednesday");
    Put_Line("3 - Thursday");
    Put_Line("4 - Friday");
    Put_Line("5 - Saturday");
    Put_Line("6 - Sunday");
    Get(selected_day_value);
    selected_day = Day_Of_The_Week'pos(selected_day_value);

    if( is_Weekday(selected_day))
        Put_Line( Day_Of_The_Week'Image(selected_day) & " is a weekday." );
    else
        Put_Line( Day_Of_The_Week'Image(selected_day) & " is a weekday." );

end Day;

我在 if 语句方面遇到了麻烦。如何检查 dayOfTheWeek 是否属于平日子类型或周末子类型?


只是有点龟毛,但你的代码假设输入有效。在现实生活中,你应该在枚举上使用一个表示子句来保证范围为0-6,并获得一个整数,使用无检查转换到你的整数类型,检查它是否有效,然后检查周末/工作日子类型。 - NWS
为什么不明确输入“Day_Of_The_Week”呢? package Day_Of_The_Week_Text_IO is new Ada.Text_IO.Enumeration_IO (Day_Of_Week); 然后 Get (Selected_Day); Skip_Line; - Jacob Sparre Andersen
2个回答

9

You want

function is_Weekday ( dayOfTheWeek: in Day_Of_The_Week) return Boolean is
begin
    return dayoFTheWeek in Weekday;
end is_Weekday;

此外,在以下代码中,您需要使用'Val而不是'Pos
selected_day := Day_Of_The_Week'val(selected_day_value);

你可能需要看一下第二个Put_Line中的单词!


2

您不需要编写一个函数来检查这个。在这种情况下,函数只会使发生的事情变得模糊:

if Selected_Day in Weekday then
  do stuff..
else
  do other stuff...
end if;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接