gpt4 book ai didi

types - 参数较少的外部构造函数

转载 作者:行者123 更新时间:2023-12-04 07:15:36 25 4
gpt4 key购买 nike

我想做类似的事情

struct Test
nParticles::Int64
particleIDs::Vector{Particle}
function Test(nParticles::Int32)
particleIDs = createPmarticles(nParticles)
...
end
end
使得变量 particleIDs在第一个参数 nParticles 的帮助下在类型内部定义和函数 createPmarticles (这是在其他地方定义的)。
问题是,据我所知,这种类型的外部构造函数是不允许的

LoadError: LoadError: invalid redefinition of type Test


那么,有没有办法做到这一点?

最佳答案

你可以这样做:

struct Test
nParticles::Int64
particleIDs::Vector{String}
Test(nParticles::Int32) = new(nParticles, [string(i) for i in 1:nParticles])
end
现在进行一些测试:
julia> Test(Int32(3))
Test(3, ["1", "2", "3"])
请注意,这已经涵盖了默认构造函数,所以现在当您编写 Test(1,["nnn"]) 时你会得到一个错误。
如果你想要一个额外的外部构造函数,你可以在 struct 之外定义它。例如(注意 struct Test2 没有使用 new 构造函数):
struct Test2
nParticles::Int64
particleIDs::Vector{String}
end
Test2(nParticles::Int32) = Test2(nParticles, [string(i) for i in 1:nParticles])
现在可以使用:
julia> Test2(Int32(3))
Test2(3, ["1", "2", "3"])
但你仍然可以这样做:
julia> Test2(1,["nnn"])
Test2(1, ["nnn"])

关于types - 参数较少的外部构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68792124/

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