В Юлии Union
- это всего лишь объединение без тега , что немного меняет дело.
В вашем случае missing
может быть очень идиоматическим решением c, в зависимости от приложения - цель 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
в обработке данных, в то время как Some
/ nothing
приближается к Option
для вещей, которые могут существовать или не существовать (например, голова возможно пустого списка).
Обратите внимание, что часто используется только Union{T, Nothing}
. Это в большинстве случаев не делает различий в семантике и проще в обращении: из-за отсутствия тега Union
значения T <: Union{T, Nothing}
и значения ведут себя как обычные T
. Но если вам нужно отличить guish a nothing
с семантикой None
от nothing
с семантикой T
, что может происходить в обобщенных функциях c, вам необходим дополнительный слой Some
чтобы получить Some(nothing)
и nothing
.