在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 SingleSpinState
n\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:
[...]