Julia 中的结构文字

标签 struct julia

我正在做一个项目,在这个项目中,能够初始化匿名结构(也就是不关心它们是什么类型)非常有用,这些结构具有任意数量的字段和 Any 类型的值,全部合而为一线。

本质上,我需要一个字典,但可以使用点符号访问值(我意识到我可以在这里使用一个字典,但我不是这里的最终用户)。

有没有一种方法可以在 Julia 中按原样执行此操作,或者我可以定义一些具有疯狂 getfield() 重载的神奇类型(显然现在称为可变结构)?我在 Github 上看到了关于重载的 PR。这也很酷,但我发现它可能不会很快推出。

谢谢!

最佳答案

如果您对不可变的“匿名结构”感到满意(我假设是这种情况,因为您使用了“文字”一词​​),那么您可以使用闭包来模拟它,闭包可以通过let 关键字:

julia> D = let a=1, b=2; () -> Any[a,b]; end
(::#1) (generic function with 1 method)

julia> fieldnames(D)
2-element Array{Symbol,1}:
 :b
 :a

julia> D()
2-element Array{Any,1}:
 1
 2

julia> D.a
1

julia> D.b
2

julia> (let a=1, b=2; () -> Any[a,b]; end).a
1

julia> (let a=1, b=2; () -> Any[a,b]; end).b
2

这是有效的,因为 closures capture their 'closed' variables as fields .


<子>附言。更具体地说,闭包在幕后作为可调用类型实现(或者有人告诉我:p)

PPS。由于某种原因,闭包中的字段以相反的顺序引入。如果顺序对您很重要(例如 fieldnames(D)D() 中的元素顺序相同),请在 中以相反的顺序引入“字段” >let 声明,例如:D = let c=3, b=2, a=1; () -> 任何[a,b,c];结束

PPPS。或者,如果您发现这种语法很丑陋,您总是可以实现一个“createAnonymousStruct”函数,它接受一个字典或其他东西并返回这样一个闭包

关于Julia 中的结构文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44813090/

相关文章:

c - 具有包含 char * 的结构类型的 out 参数的公共(public) API 设计

julia - 在函数体中未指定泛型类型参数时,如何访问它?

julia - 在 Julia 中通过稀疏向量更新密集向量很慢

struct - 谁拥有采用 &self 的函数中结构成员的所有权?

json - Golang 未设置结构体字段

c++ - 在C++中从文件读取时动态分配内存给结构

c - 将结构数组传递给 C 中不同文件中的函数

julia - 从 Julia 中的 Nullable 类型转换

zip - 从 ftp url 导入 zip 文件中的文本 CSV 文件会导致绑定(bind)错误 (BoundsError)

julia - 函数不接受包含函数作为参数的元组