Julia支持动态" expando对象" a la C#?

时间:2017-09-18 23:39:03

标签: julia dynamic-typing

在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对象"在朱莉娅?

1 个答案:

答案 0 :(得分:2)

不,目前无法通过分配未定义的字段名称来动态创建新字段。将来可能会使用#1974: allow overloading of a.b field access syntax这样的功能。但请注意,它目前在Julia 2.0+里程碑中被标记;它不是一个高优先级,可能会或可能不会发生。

可以创建一个宏,将字段访问权限更改为类似dict的语法,以便将@expando contact.Name = "foo"转换为contact[:Name] = "foo",但是使用字典可能更好更容易和索引语法直接。