Отрывок из упомянутой вами строки документации empty?
, в частности, означает, что такая функция nonempty?
никогда не должна быть необходимой или даже особенно полезной, потому что seq
всегда может заменить ее в булевых контекстах, которые в чистом коде Clojure это может.
Если вы все же чувствуете необходимость написать такую функцию, я скажу, что мне больше нравится первый подход. В любом случае empty?
построен на seq
, так что нельзя не назвать его; простое приведение результата к логическому результату кажется чище, чем две поездки через not
. Другие варианты см., Например, nil?
, false?
(я все еще предпочитаю актерский состав).
Кстати, почему ты хочешь написать это ...? Возможно, для вызова метода Java с аргументом boolean
? В этом случае, я думаю, актеры хорошо выразят намерение.
Обновление: Пример, иллюстрирующий последнюю точку:
Простой класс Java:
public class Foo {
public static boolean foo(boolean arg) {
return !arg;
}
}
Какой-то код клиента Clojure:
(Foo/foo nil)
; => NullPointerException
(Foo/foo (boolean nil))
; => true