我有一个带有列表的结构:
struct my_struct {
my_list : list of uint;
// other fields
};
我想构建类似于cpp class constructor
:当我my_struct
使用new
运算符分配时,my_list
将启动一个零元素 - my_list == { 0 }
;
有没有办法在 e 中构建结构构造函数?
感谢您的帮助
是的, any_struct 有 init() 方法。它在使用 new() 创建结构时以及在生成结构时调用(在生成之前,约束求解开始)。
如果您希望此列表始终具有相同的初始值,无论是使用 new 还是使用 gen 创建,请将此列表字段标记为不生成。
struct my_struct {
!l : list of_ int;
init() is also {
l = {0};
};
};
在e中,没有像 C++ 中那样的参数化构造函数的“一般”概念,但正如在另一个答案中提到的,有一个预定义的init()
方法(没有参数),每当创建给定类型的新对象时都会自动调用它。重要的是要注意,无论何时init()
创建该类型的对象,都会调用它,无论其创建方式如何:它可能是显式创建 via ,隐式创建作为预运行生成的一部分,等等。new
还有一点很重要:如果你只需要给一个字段赋值一个特定的常量值,你也可以直接在字段声明时指定这个值,不需要通过 来做init()
,例如:
struct my_struct {
my_list : list of uint = {0}; // field declared with an initializer
};