Я бы определил два внутренних конструктора для Point
следующим образом:
IntOrNothing = Union{Int,Nothing}
struct Point
x::IntOrNothing
y::IntOrNothing
a::Int
b::Int
Point(x::Nothing,y::Nothing,a,b) = new(x,y,a,b)
Point(x,y,a,b) = y^2 != x^3 + a*x + b ? error("Point is not on curve") : new(x,y,a,b)
end
, так как это было бы наиболее читабельным, на мой взгляд.
Обратите внимание, что вы получите MethodError
, еслиВы звоните Point(nothing,2,1,3)
, но, думаю, из вашего кода вам не безразличен тип исключения, генерируемого при неверных данных.
Решает ли это вашу проблему?