在Julia中检查外部构造函数时出错
我有以下带有两个外部构造函数的在Julia中检查外部构造函数时出错,julia,Julia,我有以下带有两个外部构造函数的struct struct SingleSpinState <: EPState spins::BitArray{1} end SingleSpinState(n_sites::Int) = SingleSpinState(rand(Bool, n_sites)) SingleSpinState(n_sites::Int, n_particles::Int) = SingleSpinState(cat(1,trues(n_particles),fal
struct
struct SingleSpinState <: EPState
spins::BitArray{1}
end
SingleSpinState(n_sites::Int) = SingleSpinState(rand(Bool, n_sites))
SingleSpinState(n_sites::Int, n_particles::Int) = SingleSpinState(cat(1,trues(n_particles),falses(n_sites - n_particles)))
struct SingleSpinStaten\u粒子
。根据基本的错误检查应该在内部构造函数中进行,但在我看来,上述情况非常常见:外部构造函数使用内部构造函数,但其参数将以某种方式受到约束
处理这种情况的正确方法是什么?您可以定义多个内部构造函数:
julia> struct SingleSpinState
spins::BitVector
SingleSpinState(n_sites::Int) = new(bitrand(n_sites))
function SingleSpinState(n_sites::Int, n_particles::Int)
if !(n_sites > n_particles)
throw(ArgumentError("n_sites must be larger than n_particles"))
end
new([trues(n_particles); falses(n_sites-n_particles)])
end
end
julia> SingleSpinState(2)
SingleSpinState(Bool[false, true])
julia> SingleSpinState(2, 1)
SingleSpinState(Bool[true, false])
julia> SingleSpinState(2, 3)
ERROR: ArgumentError: n_sites must be larger than n_particles
Stacktrace:
[...]