Реализация “механизма правил” в Python

В большинстве случаев они по существу одинаковы, но вторая версия сохраняет память, потому что для каждого объекта есть только один экземпляр функции, а не отдельная функция для каждого объекта.

Причина использования первой формы является доступ к «частным членам». Например:

var A = function () {
    var private_var = ...;

    this.x = function () {
        return private_var;
    };

    this.setX = function (new_x) {
        private_var = new_x;
    };
};

Из-за правил определения javascript private_var доступен функции, назначенной this.x, но не вне объекта.

19
задан Kamil Kisiel 22 January 2009 в 04:19
поделиться

4 ответа

Не изобретайте еще один язык правил.

Или использование Python или использование некоторый другой существующий, уже отлаженный и рабочий язык как BPEL.

Просто пишут Ваши правила в Python, импортируют их и выполняют их. Жизнь более проста, намного легче отладить, и Вы на самом деле решили фактическую проблему показаний, не создавая другую проблему.

Воображают этот сценарий. Ваши повреждения программы. Это - теперь или парсинг правила, выполнение правила или само правило. Необходимо отладить все три. Если бы Вы записали правило в Python, то это было бы правило, и это было бы этим.

"Я думаю, что было бы трудно отфильтровать Python до такой степени, когда, пользователь не мог непреднамеренно сделать некоторого сумасшедшего материала с правилами, который не был предназначен".

Это в основном, "Я хочу записать компилятор" аргумент.

1) Вы - основной пользователь. Вы запишете, отладите и поддержите правила. Есть ли действительно армии сумасшедших программистов, которые будут делать сумасшедшие вещи?В самом деле? Если существует какой-либо потенциальный сумасшедший пользователь, говорят с ними . Преподавайте Их. Не боритесь против них путем изобретения нового языка (который необходимо будет затем поддержать и отладить навсегда.)

2) Это - просто обработка журнала. Нет никакой реальной стоимости для сумасшествие . Никто не собирается ниспровергать мировую экономическую систему с дефектной обработкой журнала. Не делайте небольшую задачу с несколькими дюжинами строк Python на 1 000 интерпретаторов строки для интерпретации нескольких дюжин строк некоторого языка правила. Просто запишите несколько дюжин строк Python.

Просто запись это в Python так быстро и ясно как Вы можете и идти дальше к следующему проекту.

61
ответ дан 30 November 2019 в 02:06
поделиться

Немного трудно ответить на вопрос, не зная, какова область применения.

  • , О чем Вы пытаетесь рассуждать?
  • , О каком уровне анализа Вы говорите?
  • , Как сложный Вы видите правила стать?
  • , Насколько сложный взаимодействие между различными правилами?

На одном конце спектра простой одноразовый подход как Вы, сделали предложение. Это прекрасно, если правила - немногие, относительно простые, и Вы не делаете ничего более сложного, чем агрегирующиеся сообщения журнала, которые соответствуют указанным правилам.

С другой стороны спектра тяжеловес, обосновывающий систему, что-то как CLIPS, который имеет интерфейс Python . Это - реальный механизм правил с выводом и предлагает способность сделать сложное обоснование. При создании чего-то как диагностический механизм, который работает прочь журнала программы, это могло быть более соответствующим.

РЕДАКТИРОВАНИЕ:

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

0
ответ дан 30 November 2019 в 02:06
поделиться

Единственное место это отличается от самого синтаксиса Python, message ~ "program\\[\d+\\]: message" часть, поэтому интересно, нужен ли Вам действительно новый синтаксис.

Обновление: хорошо, у Вас есть или проблемы удобства использования или безопасности - это разумно. Пара предложений:

  • Понимают намек от Awk и оптимизировали синтаксис сопоставления с образцом, например, /program\[\d+\]: message/ вместо message ~ "program\\[\d+\\]: message".

  • я реализовал бы его путем перевода в выражение Python, поскольку вход анализируется, вместо того, чтобы создать дерево объектов оценить, если Вы не ожидаете делать больше операций на этих вещах, чем оценка. Это должно нуждаться в меньшем количестве кода и работать быстрее. Верхний уровень мог бы пойти что-то как:

    def compile(input):
        return eval('lambda message, severity: %s' % parse(input))
    

Другая идея, далее далеко от дома: запишите свое приложение в Lua. Это разработано для непрограммистов для расширения программ обоснованно безопасно, не будучи должен изучить много. (Это использовалось тот путь успешно, и можно поиграть в песочнице оценку, таким образом, код пользователя не может достигнуть возможности, Вы не передаете ему явно, мне говорят.)

я замолчу теперь.:-) Удачи!

0
ответ дан 30 November 2019 в 02:06
поделиться

You might also want to look at PyKE.

5
ответ дан 30 November 2019 в 02:06
поделиться
Другие вопросы по тегам:

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