在C#中,可以使用expando对象在运行时定义具有字段的动态对象。例如:
dynamic contact = new ExpandoObject();
contact.Name = “Patrick Hines”;
contact.Phone = “206-555-0144”;
正如您所看到的, contact 对象是动态的,在某种意义上我们可以设置对象中的字段,而不会先声明对象的结构。我理解在Julia中我们可以有一个没有声明类型的参数/变量,如:
function setProp1(obj) obj.prop1=1 end
但是,据我所知, obj 对象必须从具有字段prop1的类型创建。如果prop1未在某个地方声明为字段,则 setProp1 无法动态设置字段 prop1 。如果我想要充满活力,并且我不想担心性能,那么有一种方法可以创建" expando对象"在朱莉娅?
答案 0 :(得分:2)
不,目前无法通过分配未定义的字段名称来动态创建新字段。将来可能会使用#1974: allow overloading of a.b field access syntax这样的功能。但请注意,它目前在Julia 2.0+里程碑中被标记;它不是一个高优先级,可能会或可能不会发生。
可以创建一个宏,将字段访问权限更改为类似dict的语法,以便将@expando contact.Name = "foo"
转换为contact[:Name] = "foo"
,但是使用字典可能更好更容易和索引语法直接。