Выполнить выражение из строки? (Pharo)

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

Выполнить выражение из строки? (Pharo)

Genosse
Всех приветствую!

Разбираюсь с одной специфической мыслью, не уверен, что кто-то с ходу ответит, но вдруг...
Может кто нибудь знает как в Pharo выполнить выражение из строки?
Т.е. имеем предположим строку '2 + 3' и в какой то момент хотим получит результат этого выражения.

Пока понял только что можно получить RBMessageNode с разложенным по полочкам кодом  (RBParser parseExpression: '2 + 3').
Дальше видимо нужно скормить это как-то OpalCompiler...
Но пока не разобрался (задокументировано слабо, а моей подготовки не хватает понять на ощупь)

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Выполнить выражение из строки? (Pharo)

Denis Kudriashov
Добрый день.

Все просто:

OpalCompiler evaluate: '1 + 2'

16 ноября 2016 г., 15:25 пользователь Александр <[hidden email]> написал:
Всех приветствую!

Разбираюсь с одной специфической мыслью, не уверен, что кто-то с ходу ответит, но вдруг...
Может кто нибудь знает как в Pharo выполнить выражение из строки?
Т.е. имеем предположим строку '2 + 3' и в какой то момент хотим получит результат этого выражения.

Пока понял только что можно получить RBMessageNode с разложенным по полочкам кодом  (RBParser parseExpression: '2 + 3').
Дальше видимо нужно скормить это как-то OpalCompiler...
Но пока не разобрался (задокументировано слабо, а моей подготовки не хватает понять на ощупь)

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Выполнить выражение из строки? (Pharo)

Genosse
Большое спасибо.
Вы сохранили мне много часов времени :)

среда, 16 ноября 2016 г., 17:37:29 UTC+3 пользователь Denis Kudriashov написал:
Добрый день.

Все просто:

OpalCompiler evaluate: '1 + 2'

16 ноября 2016 г., 15:25 пользователь Александр <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="rPSpI1F4AQAJ" rel="nofollow" onmousedown="this.href=&#39;javascript:&#39;;return true;" onclick="this.href=&#39;javascript:&#39;;return true;">gen...@...> написал:
Всех приветствую!

Разбираюсь с одной специфической мыслью, не уверен, что кто-то с ходу ответит, но вдруг...
Может кто нибудь знает как в Pharo выполнить выражение из строки?
Т.е. имеем предположим строку '2 + 3' и в какой то момент хотим получит результат этого выражения.

Пока понял только что можно получить RBMessageNode с разложенным по полочкам кодом  (RBParser parseExpression: '2 + 3').
Дальше видимо нужно скормить это как-то OpalCompiler...
Но пока не разобрался (задокументировано слабо, а моей подготовки не хватает понять на ощупь)

--
--
<a href="http://groups.google.ru/group/sugr" target="_blank" rel="nofollow" onmousedown="this.href=&#39;http://groups.google.ru/group/sugr&#39;;return true;" onclick="this.href=&#39;http://groups.google.ru/group/sugr&#39;;return true;">http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес <a href="javascript:" target="_blank" gdf-obfuscated-mailto="rPSpI1F4AQAJ" rel="nofollow" onmousedown="this.href=&#39;javascript:&#39;;return true;" onclick="this.href=&#39;javascript:&#39;;return true;">sugr+uns...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке <a href="https://groups.google.com/d/optout" target="_blank" rel="nofollow" onmousedown="this.href=&#39;https://groups.google.com/d/optout&#39;;return true;" onclick="this.href=&#39;https://groups.google.com/d/optout&#39;;return true;">https://groups.google.com/d/optout.

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Выполнить выражение из строки? (Pharo)

Dennis Schetinin
17 ноября 2016 г., 10:31 пользователь Александр <[hidden email]> написал:
Большое спасибо.
Вы сохранили мне много часов времени :)

…Что говорит о том, что с дизайном этого аспекта что-то не так? Не очевидно, где искать объект, который выполняет нужную работу. Вроде как хочется в String положить какой-нибудь #evaluate? Или документирующие тесты написать?


--

Best regards,


Dennis Schetinin

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Выполнить выражение из строки? (Pharo)

Denis Kudriashov

18 ноября 2016 г., 7:25 пользователь Dennis Schetinin <[hidden email]> написал:
17 ноября 2016 г., 10:31 пользователь Александр <[hidden email]> написал:
Большое спасибо.
Вы сохранили мне много часов времени :)

…Что говорит о том, что с дизайном этого аспекта что-то не так? Не очевидно, где искать объект, который выполняет нужную работу. Вроде как хочется в String положить какой-нибудь #evaluate?

Положить код в строку, конечно, кажется очевидным. Но это приведет к еще большему раздуванию строки, чего пытаются избегать.
Кроме того, для #evaluate в общем случае нужно иметь возможность указать bindings и прочее окружение для привязки переменных, глобальных имен, различные ограничения. И в таком виде метод у строки будет не так прост.
 
Или документирующие тесты написать?

Тесты к этому поведению есть. Но их поиск не сильно отличается от исходной задачи.

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Выполнить выражение из строки? (Pharo)

Denis Kudriashov

18 ноября 2016 г., 10:26 пользователь Denis Kudriashov <[hidden email]> написал:
17 ноября 2016 г., 10:31 пользователь Александр <[hidden email]> написал:
Большое спасибо.
Вы сохранили мне много часов времени :)


В таких случаях я обычно начинаю инспектировать существующие тулзы, которые уже выполняют то, что мне нужно. Через "halo menu/inspect morph" обычно сразу видно, что делает элемент меню или кнопка, и можно сразу вживую продебажить, как оно работает.

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Выполнить выражение из строки? (Pharo)

Genosse


пятница, 18 ноября 2016 г., 12:31:25 UTC+3 пользователь Denis Kudriashov написал:


В таких случаях я обычно начинаю инспектировать существующие тулзы, которые уже выполняют то, что мне нужно. Через "halo menu/inspect morph" обычно сразу видно, что делает элемент меню или кнопка, и можно сразу вживую продебажить, как оно работает.

Видимо так... Я вот и залез в итоге не совсем по адресу в дебри  RBParser и AST.
Мне бы лично хватило бы почитать подробной документации ;)
Но понятно, что глубины OpalCompiler это не то место в которое часто пытаются соваться и следовательно написание доков к нему не стоит в приоритете, так что я не жалуюсь...
Хотя конечно странно, что по Фаро нет какой нибудь Википедии даже на английском.

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Выполнить выражение из строки? (Pharo)

Dennis Schetinin

18 ноября 2016 г., 15:28 пользователь Александр <[hidden email]> написал:
Мне бы лично хватило бы почитать подробной документации ;)

Документацию кто-то должен не забывать обновлять по мере развития документируемой системы…

--

Best regards,


Dennis Schetinin

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email].
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.