gpt4 book ai didi

ada - 如何将枚举转换为整数以处理溢出/环绕?

转载 作者:行者123 更新时间:2023-12-04 11:54:41 27 4
gpt4 key购买 nike

我正在学习 ada 并且我正在尝试为枚举实现附加重载。
基本上我希望能够向 Day 类型添加一个 Integer 并获得生成的 Day 值。所以星期一 + 2 => 星期三。
这是我的简化代码:

procedure overload is                                                                                                             
type Day is (
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
);
day1 : Day := Monday;
function "+" (left: Day; right: Integer) return Day is
-- how would I handle this here? I want to basically say
-- if Day + Integer > Saturday then
-- wraparound back to Sunday
return DayValue;
begin
for x in 0 .. 7 loop
Ada.text_io.put_line("Monday + " & Integer'Image(x) & " = " & Day'Image(day1 + x));
end loop;
end overload;

最佳答案

您可以使用 'Pos 和 'Val 属性来做到这一点。 'Pos 返回提供的日期相对于第一个选项(索引为 0)的位置,而 'Val 接受一个 Pos 值并返回日期类型值:

return Day'Val(Day'Pos(Left) + Right);
对于环绕检查 'Pos 星期六的值与 'Pos 值的左 + 右值,并使用 Day'Val(0) 为星期日
或者将 Right 的输入类型从 Integer 切换到 Natural 并使用模数数学:
return Day'Val((Day'Pos(left) + Right) mod 7);
你甚至可以花哨并为 7 做一个常数:
Day_Mod : constant := Day'Pos(Day'Last) - Day'Pos(Day'First) + 1;
然后它变成
return Day'Val((Day'Pos(left) + Right) mod Day_Mod);

关于ada - 如何将枚举转换为整数以处理溢出/环绕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69248398/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com