OberonCore
https://forum.oberoncore.ru/

зачем в Commands.Call разделитель - точка с запятой, а не ~?
https://forum.oberoncore.ru/viewtopic.php?f=22&t=6787
Страница 1 из 1

Автор:  budden [ Воскресенье, 18 Июль, 2021 20:28 ]
Заголовок сообщения:  зачем в Commands.Call разделитель - точка с запятой, а не ~?

В этом есть какой-то сакральный смысл? Например, при этом обрезается чтение (из редактора или с терминала в режиме приложения под Windows) вот такой команды:

Код:
Модуль.Команда первыйАргумент ; второйАргумент ~


Вопреки ожидениям, ";" и "второйАргумент" не передаются в команду. Непохоже, чтобы это было описано в документации, для меня выглядит пока что как ошибка.

Автор:  Ярослав Романченко [ Понедельник, 19 Июль, 2021 08:01 ]
Заголовок сообщения:  Re: зачем в Commands.Call разделитель - точка с запятой, а н

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

Автор:  budden [ Вторник, 20 Июль, 2021 22:44 ]
Заголовок сообщения:  Re: зачем в Commands.Call разделитель - точка с запятой, а н

Речь идёт про разделитель команд, а не аргументов. Commands.Call может запустить сразу несколько команд:

Код:
Activate a string of commands, including their parameters.
   The string is parsed from left to right and Activate is called for every command.
   Parsing stops at the end of the string, or when Activate returns an error.
   The flags are applied to every command, i.e., for sequential execution,
   use the Wait flag (the caller waits until all commands return).
   Syntax:
      cmds = [mode " " ] cmd {";" cmd} .
      mode = "PAR" | "SEQ" .
      cmd = mod ["." proc] [" " params] .
      params = {<any character except ";">} .

Но именно она вызывается по Ctrl-Enter из текстового редактора, когда нужно выполнить команду. Насколько я понял, сначала вырезается
кусок до „~“ и передаётся в Call. И уже внутри Call нас ждёт тот сюрприз, что он снова бьёт команду на части, на этот раз по вхождениям „;“.

И вот эта последняя особенность кажется странной.

Автор:  Sergej Durmanov [ Суббота, 24 Июль, 2021 22:00 ]
Заголовок сообщения:  Re: зачем в Commands.Call разделитель - точка с запятой, а н

нет ничего странного: "~" признак конца команды в тексте при разборе. А Commands Call это просто процедура, которая принимает уже готовую команду, (начинающуюся с PAR|SEQ и заканчивающуюся ~) . Поэтому логично, что внутри строки в качестве разделителя изпользуется символ отличный от ~ . Иначе её невозможно будет извлечь из текста

Автор:  budden [ Воскресенье, 25 Июль, 2021 13:55 ]
Заголовок сообщения:  Re: зачем в Commands.Call разделитель - точка с запятой, а н

Логику понять можно, но странным оно от этого быть не перестаёт, System.DoCommands делает почти то же самое, а при этом вполне хватает одного разделителя, не говоря уж о других подобных языках. Т.е. слишком жирным выглядит использовать целых два разных разделителя ради такой мелочи. Но если бы это хотя бы было документировано, то было бы ещё куда ни шло. Пока выглядит, что сделали и забыли. Тогда вопрос такой (понятно, что сложный): кто-нибудь этим пользуется в A2?

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/