如何在Julia'中指定条件;什么是复合类型?

如何在Julia'中指定条件;什么是复合类型?,julia,elliptic-curve,Julia,Elliptic Curve,我试图在Julia中创建一个复合类型,表示椭圆曲线上的点。 如果满足y^2==x^3+a*x+b或x和y都等于零,则点有效。请注意,后一种情况表示无穷远处的点 我已经想出了下面的代码,但不知道如何解释无穷远处的点 有没有一种方法可以处理struct中的不同异常 异常是否可以简单地返回有效类型而不是错误?e、 g.如果x==nothing&&y==nothing,则点(nothing,nothing,a,b) 我将为点定义两个内部构造函数,如下所示: IntOrNothing = Union

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

我已经想出了下面的代码,但不知道如何解释无穷远处的点

  • 有没有一种方法可以处理struct中的不同异常
  • 异常是否可以简单地返回有效类型而不是错误?e、 g.如果x==nothing&&y==nothing,则点(nothing,nothing,a,b)

我将为
点定义两个内部构造函数,如下所示:

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
因为在我看来,这是最具可读性的

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


它解决了您的问题吗?

您的代码有什么问题?它不接受a和b Int所在的点(nothing,nothing,a,b)。换句话说,如果x和y都等于nothing,则不应产生错误。
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