Похоже, это в основном сглаживание вложенных ключей. Это также кажется проблемой 4clojure .
Поиск сглаживания карты на github дает много результатов.
Один пример реализация:
(defn flatten-map
"Flattens the keys of a nested into a map of depth one but
with the keys turned into vectors (the paths into the original
nested map)."
[s]
(let [combine-map (fn [k s] (for [[x y] s] {[k x] y}))]
(loop [result {}, coll s]
(if (empty? coll)
result
(let [[i j] (first coll)]
(recur (into result (combine-map i j)) (rest coll)))))))
Пример
(flatten-map {:OUT
{:x 5
:x/A 21
:x/B 33
:y/A 24}})
=> {[:OUT :x] 5, [:OUT :x/A] 21, [:OUT :x/B] 33, [:OUT :y/A] 24}
Еще более общая версия от Christoph Grand:
(defn flatten-map
"Take a nested map (or a nested collection of key-value pairs) and returns a
sequence of key-value pairs where keys are replaced by the result of calling
(reduce f pk path) where path is the path to this key through the nested
maps."
([f kvs] (flatten-map f nil kvs))
([f pk kvs]
(mapcat (fn [[k v]]
(if (map? v)
(flatten-map f (f pk k) v)
[[(f pk k) v]])) kvs)))
Пример:
(flatten-map conj [] {:OUT
{:x 5
:x/A 21
:x/B 33
:y/A 24}})
=> ([[:OUT :x] 5] [[:OUT :x/A] 21] [[:OUT :x/B] 33] [[:OUT :y/A] 24])
Вы хотите использовать для цикла в Сценарии пакетной обработки
@echo off
setLocal EnableDelayedExpansion
set CLASSPATH="
for /R ./lib %%a in (*.jar) do (
set CLASSPATH=!CLASSPATH!;%%a
)
set CLASSPATH=!CLASSPATH!"
echo !CLASSPATH!
, Это действительно помогло мне, когда я искал сценарий пакетной обработки для итерации через все файлы в каталоге, это об удалении файлов, но это очень полезно.
Короткий сценарий пакетной обработки для удаления пустых каталогов
Честно говоря, используйте ответ Jon, хотя, намного лучше если все файлы находятся в одном каталоге, это могло бы выручить Вас в другое время все же.
Почему был бы Вы использовать найти? По-видимому, Вы знаете все библиотеки Ваши потребности файла банки заранее, итак, почему не просто перечисляют их?
, С другой стороны, Вы могли всегда использовать -Djava.ext.dirs=lib
и позволять ему взять все тот путь.
С тех пор 6.0, Java поддерживает подстановочные пути к классам.
Походит , исполняемый JAR мог работать на Вас. Если Вы распределяете ZIP со всеми БАНКАМИ Ваши основные стандартные потребности, и Вы действительно выполняете его в командном процессоре, возможно, Вы могли создать исполняемый JAR с Основным Классом и Путем к классу, определенным в декларации. Все Ваши пользователи должны сделать, дважды щелкнуть по JAR и Вашему дяде Bob's.
То, что я делаю, когда я выпускаю БАНКИ командной строки для Windows/Linux, должно встроить все библиотеки JAR в моем JAR с помощью команды ANT:
<fileset dir="${module.classes.dir}"/>
<zipfileset src="${endorsed.lib.dir}/myLibrary.jar"/>
Таким образом библиотеки являются плавкой вместе с Вашими файлами класса.
Это не лучший способ двоичной возможности многократного использования, но если библиотеки не так тяжелы, Вам выполнили Ваше приложение путем простого вызова Java - банка myApp.jar в любой ОС.
Для среднего разработчика приложений использование классов является нормой. На поверхности, классы делают структуры кажутся ненужными, но когда вы копнете глубже в нитчато-угрюмые детали они на самом деле довольно разные.
См. здесь для получения информации о некоторых различиях между структурами и классами.
Наиболее известным отличием является то, что классы являются ссылочными типами, а структуры - стоимостными типами. Это важно, поскольку позволяет разработчику библиотеки управлять использованием экземпляров типа данных.
-121--1732732-TortoitySVN (svn) имеет тесную интеграцию с explorer, и большинство устройств, которых я знаю, что запускают Windows и используют подрывную систему, также используют Tortoise.
-121--3808414-Вариант, если вы хотите, чтобы параметр CLASSPATH находился вне сценария и вы не запускали оболочку с/V, вы можете сделать что-то подобное:
@echo off
FOR /R ./lib %%a in (*.jar) DO CALL :AddToPath %%a
ECHO %CLASSPATH%
GOTO :EOF
:AddToPath
SET CLASSPATH=%1;%CLASSPATH%
GOTO :EOF
Полезно для настройки среды, когда вы только играете вокруг в командной строке.
Вы можете использовать немного другой способ, если вы используете Maven для сборки вашего проекта. Application Assembler Maven Plugin предназначен для создания программ запуска Java-приложений. Этот плагин генерирует для вас bat-файл launcher и помещает зависимости в указанную папку. Опционально launcher может зарегистрировать ваше приложение как сервис\demon.
Этот плагин помогает сохранить CM части вашего проекта DRY.