如何在 Julia 的复合类型中指定条件?

How to specify conditions within Julia's composite types?

我正在尝试在 Julia 中创建一个表示椭圆曲线上的点的复合类型。 如果满足 y^2 == x^3 + a*x + b 或 x 和 y 都不等于,则点有效。请注意,后一种情况表示无穷远点。

我想出了下面的代码,但不知道如何解释无穷大点。

IntOrNothing = Union{Int,Nothing} struct Point x::IntOrNothing y::IntOrNothing a::Int b::Int Point(x,y,a,b) = x == nothing || y == nothing || y^2 != x^3 + a*x + b ? error("Point is not on curve") : new(x,y,a,b) end

我会像这样为 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

因为在我看来这是最易读的。

请注意,如果您调用 Point(nothing,2,1,3),您将得到 MethodError,但我猜从您的代码来看,您并不关心抛出的异常类型,只要它是针对无效数据抛出的即可。

它能解决您的问题吗?