Как проверить, является ли объект clojure байтовым массивом? Как написать функцию bytes?, которая возвращает следующее: (bytes? [1 2 3]) ;; => false (bytes? (byte-array 8)) ;; => true Ответ 1 (defn bytes? [x] (if (nil? x) false (= (Class/forName "[B") (.getClass x)))) Обновление. Здесь уже задан тот же вопрос Проверка того, является ли объект примитивным массивом Java в Clojure. И google дает именно эту страницу на ваш вопрос "как проверить, является ли объект clojure байтовым массивом?";) Ответ 2 То, как я это делал до сих пор, создавал массив этого типа и тестировал его класс. Чтобы предотвратить создание ненужного экземпляра каждый раз, создайте функцию, которая закрывается над классом этого конкретного типа массива. (defn test-array [t] (let [check (type (t []))] (fn [arg] (instance? check arg)))) (def byte-array? (test-array byte-array)) => (byte-array? (byte-array 8)) true => (byte-array? [1 2 3]) false Пример Mobyte кажется намного проще, хотя, похоже, у меня будет некоторый рефакторинг, где я использовал это:) Ответ 3 Clojure.core версии 1.9 и выше поддерживает bytes? функция. Здесь ссылка Clojuredocs
Ответ 1 (defn bytes? [x] (if (nil? x) false (= (Class/forName "[B") (.getClass x)))) Обновление. Здесь уже задан тот же вопрос Проверка того, является ли объект примитивным массивом Java в Clojure. И google дает именно эту страницу на ваш вопрос "как проверить, является ли объект clojure байтовым массивом?";)
Ответ 2 То, как я это делал до сих пор, создавал массив этого типа и тестировал его класс. Чтобы предотвратить создание ненужного экземпляра каждый раз, создайте функцию, которая закрывается над классом этого конкретного типа массива. (defn test-array [t] (let [check (type (t []))] (fn [arg] (instance? check arg)))) (def byte-array? (test-array byte-array)) => (byte-array? (byte-array 8)) true => (byte-array? [1 2 3]) false Пример Mobyte кажется намного проще, хотя, похоже, у меня будет некоторый рефакторинг, где я использовал это:)