Организация кода Clojure

Взаимное исключение. Вот статья в Википедии о нем:

http://en.wikipedia.org/wiki/Mutual_exclusion

точка взаимного исключения должна синхронизировать два потока. Когда у Вас есть два потока, пытающиеся получить доступ к единственному ресурсу, общий шаблон должен иметь первый доступ попытки блока кода для установки взаимного исключения прежде, чем ввести код. Когда второй код блокирует доступ попыток, он видит, что взаимное исключение установлено и ожидает, пока первый блок кода не завершен (и сбрасывает взаимное исключение), затем продолжается.

Определенные детали того, как это выполняется, очевидно, варьируются значительно языком программирования.

10
задан Svante 16 July 2009 в 08:25
поделиться

2 ответа

Я тоже начал с использования загрузочного файла . Согласно документации Clojure по библиотекам ,

Clojure определяет соглашения для именования и структурирования библиотек:
* Имя библиотеки - это символ, который обычно состоит из двух или более частей, разделенных точками.
* Контейнер библиотеки - это ресурс Java, путь которого относительно пути к классам является производным от имени библиотеки:
o Путь - это строка
o Точки в имени библиотеки заменяются косой чертой в пути
o Дефис в имени библиотеки заменяется подчеркиванием в пути
o Путь заканчивается на ".clj"
* Библиотека начинается с формы "ns", которая
o создает пространство имен Clojure, которое разделяет его имя, и
o объявляет свои зависимости от классов Java, основных возможностей Clojure и / или других библиотек

Документация Clojure дополнительно предоставляет следующий пример объявления пространства имен (который, я уверен, вы уже знаете, но я предоставляю его здесь для полноты) :

(ns com.my-company.clojure.examples.my-utils
  (:import java.util.Date)
  (:use [clojure.contrib.def :only (defvar-)])
  (:require [clojure.contrib.shell-out :as shell]))

Итак, мой ответ - использовать библиотеки для вашего проекта - это поможет упростить все эти папки. Чтобы «включить» библиотеку, вы будете использовать require, например:

(require 'clojure.contrib.def 'clojure.contrib.except 'clojure.contrib.sql)
(require '(clojure.contrib def except sql))

Пока документация верна и ваш проект зависит от пути к классам, все должно успешно загружаться. Надеюсь это ответит на твой вопрос. : D

9
ответ дан 3 December 2019 в 22:38
поделиться

Наряду с использованием библиотек пространств имен, как уже было предложено, возможно, ваша общая функция 'generate' является кандидатом на использование мультиметода? http://clojure.org/multimethods

Это поможет избежать конфликта имен функций и добавить общую абстракцию к вашим «фигурам», полагаю, это зависит от того, удастся ли найти подходящую функцию диспетчеризации.

6
ответ дан 3 December 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: