Действительно ли метапрограммирование возможно в JavaScript?

Если Ваш CD 11.10, можно использовать его для обновления от более ранней версии (например, 11.04).

Для обновления от 11,10 до 12,04 Вам нужны 12,04 установочных CD.

15
задан Nick Louloudakis 13 September 2016 в 11:13
поделиться

6 ответов

Нет. JavaScript не поддерживает это.

Но это тоже выглядит неплохо:

var Result =  from(obj1)
             .as("x")
             .where("x.id=5")
             .groupby("x.status")
             .having(count("x.status") > 5)
             .select("x.status");
18
ответ дан 1 December 2019 в 01:11
поделиться

Хотя это и не совсем то, что вам нужно, можно написать синтаксические анализаторы на javascript и просто проанализировать запрос (сохраненный в виде строк), а затем выполнить его. например, используя библиотеки вроде http://jscc.jmksf.com/ (несомненно, есть и другие), это не должно быть слишком сложно реализовать.

но то, что у вас есть в вопросе, выглядит великолепно уже, я не уверен, почему вы хотите, чтобы он выглядел так, как вы предлагали.

5
ответ дан 1 December 2019 в 01:11
поделиться

Что вы хотите - это заменить синтаксический анализатор javascript на синтаксический анализатор SQL. Он не был создан для этого, синтаксис javascript не позволяет вам.

То, что у вас есть, на 90% похоже на SQL (он отображается прямо на него) и на 100% действительный javascript, что является большим достижением . Мой ответ на вопрос в заголовке: ДА, метапрограммирование возможно, но НЕТ оно не даст вам синтаксического анализатора SQL, так как он должен использовать грамматику javascript.

t позволяют вам.

То, что у вас есть, на 90% похоже на SQL (он отображается прямо на него) и на 100% действительный javascript, что является большим достижением. Мой ответ на вопрос в заголовке: ДА, метапрограммирование возможно, но НЕТ оно не даст вам синтаксического анализатора SQL, так как он должен использовать грамматику javascript.

t позволяют вам.

То, что у вас есть, на 90% похоже на SQL (он отображается прямо на него) и на 100% действительный javascript, что является большим достижением. Мой ответ на вопрос в заголовке: ДА, метапрограммирование возможно, но НЕТ оно не даст вам синтаксического анализатора SQL, поскольку он обязательно использует грамматику javascript.

1
ответ дан 1 December 2019 в 01:11
поделиться

Может быть, вам нужно что-то вроде JSONPath , если у вас есть данные JSON. Я нашел это на http://www.json.org/ . Оттуда есть ссылки на множество других инструментов, если это не совсем то, что вам нужно.

(над этим также работают: http://docs.dojocampus.org/dojox/json/query )

0
ответ дан 1 December 2019 в 01:11
поделиться

Большинство людей настаивают на попытках метапрограммирования из внутри их любимого языка. Это не сработает, если язык плохо поддерживает метапрограммирование; другие ответы отметили, что JavaScript этого не делает.

Один из способов обойти это - выполнить метапрограммирование из вне языка, используя инструменты преобразования программ . Такие инструменты могут анализировать исходный код и выполнять произвольные преобразования в нем (в любом случае это то, что делает метапрограммирование), а затем выплевывать исправленную программу.

Если у вас есть система преобразования программ общего назначения, которая может анализировать произвольные языки, вы можете выполнять метапрограммирование на любом языке, который вам нравится.См. Наш DMS Software Reengineering Toolkit для такого инструмента, который имеет надежные внешние интерфейсы для C, C ++, Java, C #, COBOL, PHP, ECMAScript и ряда других языков программирования и использовался для метапрограммирование на все это.

В вашем случае вы хотите расширить грамматику JavaScript новым синтаксисом для запросов SQL, а затем преобразовать их в простой JavaScript. (Это очень похоже на преднамеренное программирование) DMS легко позволит вам создать диалект JavaScript с дополнительными правилами, а затем вы сможете использовать его возможности преобразования программ для создания эквивалентного стандартного Javascript.

Сказав это, я не большой поклонник «нестандартного синтаксиса для каждого программиста на планете», к которому ИМХО приводит намеренное программирование.

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

6
ответ дан 1 December 2019 в 01:11
поделиться

Ну, в вашем примере кода:

var Result = from(obj1)
            .as("x")
            .where("x.id=5")
            .groupby("x.status")
            .having(count("x.status") > 5)
            .select("x.status");

Единственная проблема, которую я вижу (кроме select , используемого в качестве идентификатора), заключается в том, что вы встраиваете предикат в качестве аргумента функции. Вместо этого вам придется превратить его в функцию:

            .having(function(x){ return x.status > 5; })

JavaScript имеет закрытие и динамическую типизацию, так что вы можете делать в нем некоторые действительно изящные и элегантные вещи. Просто даю тебе знать.

3
ответ дан 1 December 2019 в 01:11
поделиться
Другие вопросы по тегам:

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