ada - 相当于 Ada 中的访问器

标签 ada accessor

有没有办法在 Ada 中创建与 C# get/set 等效的方法?

我有这样的类型(在 Ada 中):

-- Ada :
type MyType is record 
    Value : Integer;
end record;

我想像这样拆分值
-- Ada :
type MyType is record 
    ten  : Integer;
    unit : Integer;
end record;

但我想保留MyType.Value (在许多只读文件中引用)。我想创建一个访问器,但我没有在 Ada 中找到如何做。我知道如何在 C# 中做:
// C# :
int Value
{
    get
    {
        return this.ten * 10 + this.unit;
    }
    set
    {
        this.unit = value % 10;
        this.ten = value / 10;
    }
}

我想做的事 :
-- ada :
MyType var := MyType'(Value => 15); -- unmodified code
var.Value := 65; -- can be modified like before

Integer ten := var.ten; -- new getter

最佳答案

这是私有(private)类型的工作。

package Hidden is
   type T is tagged private;

   function New_T (Value : Integer) return T;

   function Value (Tee : T) return Integer;
   function Ten   (Tee : T) return Integer;
   function Unit  (Tee : T) return Integer;
private -- Hidden
   type T is tagged record
      Ten  : Integer;
      Unit : Integer;
   end record;
   ...
end Hidden;

现在你可以写像
V : T := New_T (42);
...
Put_Line (Item => V.Value'Image & V.Ten'Image & V.Unit'Image);
V := New_T (23);

关于ada - 相当于 Ada 中的访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59245902/

相关文章:

java - 如何在访问器中动态定义键空间

具有重载 = 运算符的 C++ 包装器

function - 为什么 Go 函数字段 setter 不保留该函数?

arrays - 我如何在 Ada 中定义一个字符串数组?

ada - 我需要帮助查找有关 Ada 2012(或 2005)的信息

package - Ada:理解私有(private)类型和理解包装

ada - 无法编译 Ada Web Server AWS hello_world 应用程序

c - 将字符串从 Ada 函数传递到 C 函数

laravel - 在Laravel 5中访问原始的 Eloquent 变异属性值

ios - 在更改子类中的访问器方法时绕过必须@synthesize