gpt4 book ai didi

Julia 中的结构文字

转载 作者:行者123 更新时间:2023-12-03 21:34:25 25 4
gpt4 key购买 nike

我正在做一个项目,在这个项目中,能够初始化匿名结构(也就是不关心它们是什么类型)非常有用,这些结构具有任意数量的字段和 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com