如何在 Julia 的复合类型中指定条件?
How to specify conditions within Julia's composite types?
我正在尝试在 Julia 中创建一个表示椭圆曲线上的点的复合类型。
如果满足 y^2 == x^3 + a*x + b 或 x 和 y 都不等于,则点有效。请注意,后一种情况表示无穷远点。
我想出了下面的代码,但不知道如何解释无穷大点。
- 有没有办法在结构中处理不同的异常?
- 异常可以简单地 return 一个有效的类型而不是一个错误吗?例如如果 x == nothing && y == nothing then Point(nothing,nothing,a,b)
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
,但我猜从您的代码来看,您并不关心抛出的异常类型,只要它是针对无效数据抛出的即可。
它能解决您的问题吗?
我正在尝试在 Julia 中创建一个表示椭圆曲线上的点的复合类型。 如果满足 y^2 == x^3 + a*x + b 或 x 和 y 都不等于,则点有效。请注意,后一种情况表示无穷远点。
我想出了下面的代码,但不知道如何解释无穷大点。
- 有没有办法在结构中处理不同的异常?
- 异常可以简单地 return 一个有效的类型而不是一个错误吗?例如如果 x == nothing && y == nothing then Point(nothing,nothing,a,b)
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
,但我猜从您的代码来看,您并不关心抛出的异常类型,只要它是针对无效数据抛出的即可。
它能解决您的问题吗?