Использование System / getProperties в двухатомном запросе вызывает исключение FileNotFoundException - PullRequest
0 голосов
/ 18 сентября 2018

Я слежу за примерами на документах и застрял на Вызов методов Java . Когда я бегу

[:find ?k ?v
 :where [(System/getProperties) [[?k ?v]]]]

Я получаю FileNotFoundException Не удалось найти System__init.class или System.clj на пути к классам. clojure.lang.RT.load (RT.java:463).

Когда я запускаю (System/getProperties) в REPL, я получаю результаты.

{"java.runtime.name" "OpenJDK Runtime Environment",
 "sun.boot.library.path" "/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64",
 "java.vm.version" "25.181-b13",
 ...}

Я попытался запустить фрагмент с полностью определенным именем класса (java.lang.System/getProperties), и все равно получаю ошибку

(d/q '[:find ?k ?v
       :where
       [(java.lang.System/getProperties) [[?k ?v]]]
       [(.endsWith ^String ?k "version")]])

Версия Clojure: 1.9.0

Datomic Version: [com.datomic/datomic-pro "0.9.5703"] (on-prem)

Есть идеи, что мне нужно сделать, чтобы это работало? Я разрабатываю и запускаю REPL с использованием IntelliJ.

1 Ответ

0 голосов
/ 25 сентября 2018

Стюарт Халлоуэй отметил, что он считает, что это ошибка, добавленная в поддержку функции classpath.Datomic неправильно воспринимает этот символ как имя Clojure.

Обходной путь - дать ему символ Clojure для работы.Например:

(defn get-props [] (System/getProperties))

(d/q '[:find ?k ?v
       :where [(user/get-props) [[?k ?v]]]])
...