Julia 支持动态 "expando object" a la C#?
Julia supports dynamic "expando object" a la C#?
在 C# 中,可以使用 expando 对象创建一个动态对象,其中包含在运行时定义的字段。示例:
dynamic contact = new ExpandoObject();
contact.Name = “Patrick Hines”;
contact.Phone = “206-555-0144”;
如您所见,contact 对象是动态的,从某种意义上说,我们可以在对象中设置字段,而无需事先声明对象的结构。我知道在 Julia 中我们可以有一个没有声明类型的 parameter/variable,如:
function setProp1(obj) obj.prop1=1 end
但是,据我了解,obj 对象必须从具有字段 prop1 的类型创建。如果 prop1 未在某处声明为字段,setProp1 无法动态设置字段 prop1。如果我想要充满活力,并且不想担心性能,有一种方法可以在 Julia 中创建 "expando objects"?
不,目前无法通过分配给未定义的字段名称来动态创建新字段。将来可能会有像 #1974: allow overloading of a.b field access syntax 这样的功能。不过请注意,它目前被标记在 Julia 2.0+ 里程碑中;这不是一个高优先级,可能会也可能永远不会发生。
可以创建一个宏,将字段访问更改为类似 dict 的语法,例如 @expando contact.Name = "foo"
转换为 contact[:Name] = "foo"
,但使用字典可能更好更容易,并且直接索引语法。
在 C# 中,可以使用 expando 对象创建一个动态对象,其中包含在运行时定义的字段。示例:
dynamic contact = new ExpandoObject();
contact.Name = “Patrick Hines”;
contact.Phone = “206-555-0144”;
如您所见,contact 对象是动态的,从某种意义上说,我们可以在对象中设置字段,而无需事先声明对象的结构。我知道在 Julia 中我们可以有一个没有声明类型的 parameter/variable,如:
function setProp1(obj) obj.prop1=1 end
但是,据我了解,obj 对象必须从具有字段 prop1 的类型创建。如果 prop1 未在某处声明为字段,setProp1 无法动态设置字段 prop1。如果我想要充满活力,并且不想担心性能,有一种方法可以在 Julia 中创建 "expando objects"?
不,目前无法通过分配给未定义的字段名称来动态创建新字段。将来可能会有像 #1974: allow overloading of a.b field access syntax 这样的功能。不过请注意,它目前被标记在 Julia 2.0+ 里程碑中;这不是一个高优先级,可能会也可能永远不会发生。
可以创建一个宏,将字段访问更改为类似 dict 的语法,例如 @expando contact.Name = "foo"
转换为 contact[:Name] = "foo"
,但使用字典可能更好更容易,并且直接索引语法。