Прежде всего, обычно рекомендуется использовать isnothing
для сравнения, если что-то nothing
. Эта конкретная функция эффективна, поскольку она основана только на типах (@edit isnothing(nothing)
):
isnothing(::Any) = false
isnothing(::Nothing) = true
(Обратите внимание, что nothing
является единственным экземпляром типа Nothing
.)
Что касается вашего вопроса, разница между ===
и ==
(и в равной степени !==
и !=
) заключается в том, что первое проверяет, являются ли две вещи идентичными , тогда как второе проверяет для равенство . Чтобы проиллюстрировать это различие, рассмотрим следующий пример:
julia> 1 == 1.0 # equal
true
julia> 1 === 1.0 # but not identical
false
Обратите внимание, что первый является целым числом, а второй - числом с плавающей запятой.
Что означает, что две вещи идентичны? Можем ознакомиться с документацией операторов сравнения (?===
):
help?> ===
search: === == !==
===(x,y) -> Bool
≡(x,y) -> Bool
Determine whether x and y are identical, in the sense that no program could distinguish them. First the types
of x and y are compared. If those are identical, mutable objects are compared by address in memory and
immutable objects (such as numbers) are compared by contents at the bit level. This function is sometimes
called "egal". It always returns a Bool value.
Иногда сравнение с ===
выполняется быстрее, чем с ==
, поскольку последнее может включать преобразование типов.