1

我有一个带有列表的结构:

struct my_struct {
    my_list : list of uint;
    // other fields
};

我想构建类似于cpp class constructor:当我my_struct使用new运算符分配时,my_list将启动一个零元素 - my_list == { 0 }

有没有办法在 e 中构建结构构造函数?

感谢您的帮助

4

2 回答 2

1

是的, any_struct 有 init() 方法。它在使用 new() 创建结构时以及在生成结构时调用(在生成之前,约束求解开始)。

如果您希望此列表始终具有相同的初始值,无论是使用 new 还是使用 gen 创建,请将此列表字段标记为不生成。

struct my_struct {
   !l : list of_ int;
   init() is also {
      l = {0};
   };
}; 
于 2018-05-05T18:15:28.117 回答
1

e中,没有像 C++ 中那样的参数化构造函数的“一般”概念,但正如在另一个答案中提到的,有一个预定义的init()方法(没有参数),每当创建给定类型的新对象时都会自动调用它。重要的是要注意,无论何时init()创建该类型的对象,都会调用它,无论其创建方式如何:它可能是显式创建 via ,隐式创建作为预运行生成的一部分,等等。new

还有一点很重要:如果你只需要给一个字段赋值一个特定的常量值,你也可以直接在字段声明时指定这个值,不需要通过 来做init(),例如:

struct my_struct {
    my_list : list of uint = {0};  // field declared with an initializer
};
于 2018-05-05T22:16:30.133 回答