ada - Ada 202x 提案@限制理由?
问题描述
我对提议的 Ada 202x 标准有疑问。具体来说,我想知道目标名称 ( @
) 功能的约束。似乎此功能仅在赋值语句中可用,而在记录或数组聚合中不可用。这种限制背后的理由是什么?
解释为什么我认为扩大目标名称的范围会很有用。比较这两个函数。
据我了解建议标准的实施:
function Mutate (State : Some_State) return Some_State is (State with delta
Internal_Component => (State.Internal_Component with delta
Component_Array => (State.Internal_Component.Component_Array with delta
Array_Index => State.Internal_Component.Component_Array (Array_Index) + 1,
Other_Index => State.Internal_Component.Component_Array (Other_Index) - 1)));
如果目标名称功能扩展到聚合,那么这可能是:
function Mutate (State : Some_State) return Some_State is (State with delta
Internal_Component => (@ with delta -- @ is State.Internal_Component
Component_Array => (@ with delta -- @ is State.Internal_Component.Component_Array
Array_Index => @ + 1, -- @ is State.Internal_Component.Component_Array (Array_Index)
Other_Index => @ - 1))); -- @ is State.Internal_Component.Component_Array (Other_Index)
如果 delta 聚合可以隐式嵌套,这可能会导致非常干净:
function Clean_Mutate (State : Some_State) return Some_State is (State with delta
Internal_Component.Component_Array => @ with delta (
Array_Index => @ + 1,
Other_Index => @ - 1));
当然,正如所写的那样,可以使用:
function Mutate (State : Some_State) return Some_State is
Result : Some_State := State;
begin
Result.Internal_Component.Component_Array (Array_Index) := @ + 1;
Result.Internal_Component.Component_Array (Other_Index) := @ - 1;
return Result;
end Mutate;
但这仍然不是很干净,并且严重阻碍了目标名称在非赋值表达式中的使用。
解决方案
推荐阅读
- javascript - 使用 javascript 创建 HTML 元素?
- image-processing - 如何使用 HSV 获得最小的颜色轮廓?
- python - 根据非连续整数,字符和浮点数在python中拆分字符串
- c# - Store 没有实现 IUserRoleStore
用户管理器 .GetUserRoleStore() ASP.NET Core MVC 3 - mysql - Mysql加入按列分组以删除重复但仍返回行数据
- wordpress - 具有给定设计的 wp_posts 没有正确重复
- c# - 如何在 Telerik 的 RadCartesianChart 的工具提示中显示不受 CategoryPath 或 ValuePath 约束的值?
- string - 如何使用移位从 MIPS32 程序集中的 4 字节字符串中删除字符?
- scala - 如何为类型 Iterator[org.apache.spark.sql.Row] 创建编码器
- ios - 如何在发送时不显示推送消息的情况下运行该功能?