Я экспериментировал с clojure.java.api
введен в Clojure 1.6.0, как я хотел бы импортировать некоторые функциональные возможности Clojure в мой проект Java. К сожалению, он не ведет себя так, как я ожидал бы при вызове условных функций и и или с Java.Неожиданное поведение от clojure.java.api.Clojure
IFn and = Clojure.var("clojure.core", "and");
IFn or = Clojure.var("clojure.core", "or");
-- equivalent to (and true false) in clojure
and.invoke(true,false); --> returns true rather than false???
-- equivalent to (or true false) in clojure
or.invoke(true,false); --> returns null rather than true???
-- equivalent to (and true true) in clojure
and.invoke(true,true); --> returns true as expected
-- equivalent to (or true true) in clojure
or.invoke(true,true); --> returns null rather than true???
Я не могу поверить, что это ошибка, так что я подозреваю, что я что-то достаточно фундаментальное, относящееся к API отсутствую. Какая бы ни была причина, это оставило меня довольно смущенным. Если кто-нибудь может предложить объяснение, я был бы очень благодарен.
Thanks,
Мэтт.
Примите во внимание, что 'сокращения-and' и' сокращения-or' расслабить короткое замыкание семантику исходного 'or' и' and', который на что вы иногда рассчитываете. –