gpt4 book ai didi

julia - 在 Julia 中模仿 Scala Option[T] 的最佳方式?

转载 作者:行者123 更新时间:2023-12-04 10:16:13 26 4
gpt4 key购买 nike

如果认为 Scala Option[T] 在处理一些异常方面非常有用,那么我也想在 Julia 中使用这个概念。

例如,如果我们在 Julia 中编写以下 Scala 代码,

def div(x: Double, y: Double): Option[Double] = {
if (y == 0.0) None else Some(x / y)
}

我想下面的代码可以完成这项工作,但是这样做有什么更好的方法吗?
function div(x:: Float64, y:: Float64):: Array{Union{Float64, Missing}}
if (y == 0.0)
[missing]
else
[x / y]
end
end

最佳答案

在 Julia ,Union只是一个未标记的联合,这有点不同。

在您的情况下,missing可能是一个非常惯用的解决方案,具体取决于应用程序——missing 的目的是通过以下操作传播,就像 map 的链一样会在 Scala 中:

div(1.0, 0) + 1 === missing

可以比作
div(1.0, 0).map(_ + 1) == None

但请注意,这会自动发生,直到您遇到某个不知道的函数 missing . (请注意,即使 x == missing 的计算结果为 missing !)想想传播 null .

另一个变体,有点像 Option[T] , 是 Union{Some{T}, Nothing} .这种类型将迫使您明确处理这两种情况: Some需要解开,和 nothing不会传播,很快就会出错。这也有一些不同的语义: missing更像是 N/A数据处理中的值(value),而 Some/ nothing靠近 Option对于可能存在或不存在的事物(例如,可能为空列表的头部)。

请注意,通常只是 Union{T, Nothing}用来。这在大多数情况下在语义上没有区别,并且更容易处理:由于 Union未标记, T <: Union{T, Nothing} , 并且值的行为就像普通 T .但是如果你需要区分一个 nothingNone来自 nothing 的语义与 T语义,可能出现在泛型函数中,您需要额外的 Some层得到 Some(nothing)nothing .

关于julia - 在 Julia 中模仿 Scala Option[T] 的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61040659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com