2013-12-24 9 views
5

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

К примеру, я бы получить строку,

void test() { print("testing!"); } 

А потом превратить его в вызываемую функцию. Причина, по которой я хочу сделать это, - это возможность загружать файлы с dart с других серверов и вызывать их функции.

+0

Может быть связано? http://stackoverflow.com/questions/13293345/dynamic-class-method-invocation-in-dart –

+1

@ user1956570 https://www.dartlang.org/ - удивительные, эти поисковые системы – user2864740

ответ

2

Per дартса FAQ, https://www.dartlang.org/support/faq.html#q-is-it-really-a-dynamic-language-if-it-doesnt-have-eval-or-adding-fields-to-a-value-at-run-time

Dart в настоящее время не имеет функции Eval(), ни поддержка выполнения компиляции произвольных строк, хотя это может в будущем.

Итак, вам нужно будет сделать свою собственную виртуальную машину внутри дротика, чтобы делать то, что вы хотите сделать.

+0

Спасибо. Это несчастливо, но, по крайней мере, теперь я знаю. – Salgat

+1

Я согласен с FAQ, что я не уверен, в каком смысле дротик является «динамичным», учитывая это ... И они подчеркивают важность JavaScript для дизайна, и eval здесь очень важен. – Bandrami

+1

Следует иметь в виду, что отсутствие таких вещей, как 'eval' (которые, как утверждают некоторые, не все так хорошо для начала) позволяет компилятору сделать больше оптимизаций, которые в противном случае были бы возможны. –

1

В зависимости от вашей целевой платформы. Если вы ориентируетесь на автономную Dart VM, это уже возможно. Это делает Паб инструмента SDK.

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

Но это может занять много времени, чтобы реализовать это самостоятельно. Если вы хотите проанализировать математическое выражение или другие упрощенные части языка, вы можете посмотреть доступные пакеты Pub (parsers или math_exprerssions).

0

В настоящее время вы можете создать JavaScript и использовать его eval() и использовать JS-interop.

Смежные вопросы