模仿Julia中Scala选项[T]的最佳方式?

模仿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.

如果我认为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.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