gpt4 book ai didi

struct - 如何在 Julia 中引用结构本身

转载 作者:行者123 更新时间:2023-12-05 01:05:37 25 4
gpt4 key购买 nike

我有这个代码:

struct MyStruct
text::String

function MyStruct(_text::String)
text = _text
# do other things
end
end

当我写这篇文章时,我意识到 Julia 没有将 text 识别为 MyStruct 的字段。我怎样才能在 Julia 中像在 Python 中那样做这样的事情?

self.text = _text

最佳答案

不要试图模仿 Python。 Julia 不是面向对象的。

您可以模拟 Python 风格的构造函数

mutable struct MyStruct
text::String

function MyStruct(text::String)
self = new()
self.text = some_stuff(text)
return self
end
end

但要使其正常工作,结构需要是可变的。然后你可以使用 new() 设置一个 uninitialize 实例并覆盖字段。

请注意,这更等同于 __init____new__ 的组合。在 Python 中,new 部分(99% 的时间)已经为您完成,您只需在 __init__ 中改变已经创建的空对象。在 Julia 中,你必须自己做这两件事。这尤其还需要在构造函数的末尾返回新值!

说了这么多,这样写通常没什么用。更惯用的只是

struct MyStruct
text::String

MyStruct(text::String) = new(some_stuff(text))
end

除非您绝对需要结构是可变的(这会对内存布局和可能的优化产生影响)。

还阅读了内部构造函数和外部构造函数之间的区别。如果您希望上述方法成为构造 MyStruct 的唯一有效方法,这很好。如果您想要“便利构造函数”,例如使用默认参数或其他类型的转换,更喜欢外部构造函数(您没有 new 但递归调用构造函数直到到达内部构造函数)。

关于struct - 如何在 Julia 中引用结构本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70572532/

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