Кто-нибудь знает логическое обоснование "(nil <0) == true" и "(nil <= 0) == true" в Swift?
Я думаю, что Swift - очень хорошо построенный современный язык, однако есть одна вещь, которая меня озадачивает, и это является обоснованием наличия (nil <= 0) == true и (nil < 0) == true.
Вот еще примеры:
![enter image description here]()
В любом случае, верните true для nil < 0, похоже, противоречит всей необязательной концепции, где один из аргументов состоял в том, чтобы избежать инициализации номера по умолчанию до "0". Теперь "0" является особенным снова.
У кого-нибудь есть объяснения, Свифт решил иметь (nil <= 0) и (nil < 0) вернуть true.
Ответы
Ответ 1
Варианты сопоставимы, поэтому их можно сортировать, например. Правила очень просты:
- Любые два варианта, которые равны нулю, равны.
- Если один из опций - nil, а другой - нет, nil меньше, чем non-nil.
- Если оба параметра не равны нулю, сравниваются развернутые значения.
Как следствие, nil равно nil, а nil меньше любого не-nil необязательного.
Это не имеет ничего общего с назначенным вами значением 0. Назначьте -1000, или +100, или что угодно, и получите тот же результат.
Ответ 2
При сравнении двух опций, когда один равен нулю, а другое значение, значение всегда "больше", потому что нет ничего.
Итак,
nil < 0 = true Because 0 is some value but nil isn't
nil == 0 = false Makes sense because 0 isn't nil
nil <= 0 = true Same as before
0 также может быть заменено любым значением и будет получен тот же результат. На самом деле функция
func < <T>(lhs: T?, rhs: T?) -> Bool
Даже не смотрит на базовое значение, если один из них равен нулю, он просто говорит: Некоторое значение больше, чем никакое значение и Нет значения равно ни одному значению