模仿Julia中Scala选项[T]的最佳方式?
如果我认为Scala选项[T]对于处理某些异常非常有用,那么我也希望在Julia中使用这个概念 例如,如果我们在Julia中编写以下Scala代码模仿Julia中Scala选项[T]的最佳方式?,julia,Julia,如果我认为Scala选项[T]对于处理某些异常非常有用,那么我也希望在Julia中使用这个概念 例如,如果我们在Julia中编写以下Scala代码 def div(x:Double,y:Double):选项[Double]={ 如果(y==0.0)没有其他部分(x/y) } 我想下面的代码可以完成这项工作,但是有更好的方法吗 function div(x:: Float64, y:: Float64):: Array{Union{Float64, Missing}} if (y == 0.
def div(x:Double,y:Double):选项[Double]={
如果(y==0.0)没有其他部分(x/y)
}
我想下面的代码可以完成这项工作,但是有更好的方法吗
function div(x:: Float64, y:: Float64):: Array{Union{Float64, Missing}}
if (y == 0.0)
[missing]
else
[x / y]
end
end
在Julia中,
Union
只是一个未标记的Union,这有点不同
在您的情况下,missing
可能是一个非常惯用的解决方案,具体取决于应用程序——missing
的目的是通过以下操作进行传播,就像Scala中的一系列map
一样:
div(1.0, 0) + 1 === missing
可比
div(1.0, 0).map(_ + 1) == None
但请注意,这种情况会自动发生,直到您点击一些不知道丢失的函数为止。(注意,即使x==missing
的计算结果也是missing
!)请考虑传播null
另一个变体有点像Option[T]
,它是Union{Some{T},Nothing}
。此类型将强制您明确处理这两种情况:某些
需要展开,而无
不会传播,很快就会出错。这也有一些不同的语义:missing
更像是数据处理中的一个N/a
值,而Some
/nothing
更接近于选项
,用于可能存在或可能不存在的事物(例如,可能为空列表的标题)
注意,通常只使用Union{T,Nothing}
。在大多数情况下,这在语义上没有区别,而且更容易处理:由于Union
是未标记的,T感谢您给出了很好的答案,特别是指出x==missing给出了missing从1.3开始,还有Base.ismissing
。