возможность вызывать скрипт-файлы с аргументами.

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

возможность вызывать скрипт-файлы с аргументами.

Post by John Doe »

Code: Select all

1. Добавлена возможность вызывать скрипт-файлы с аргументами.
   Это касается: MCTL_SENDSTRING, MCTL_ADDMACRO, eval, lm:post, lm:check.
Изменения MCTL_SENDSTRING, MCTL_ADDMACRO пока в справке не описаны, а по LuaMacro возникли вопросы.
Я почему-то ожидал, что передача параметров будет реализована так, как это принято в командных оболочках, но оказалось иначе:

Code: Select all

 lm: post  <sequence> | @<filename> [:: <params>]
...
Если нужно передать скрипту параметры, их следует указать после имени файла через разделитель ::. Параметры являются списком Lua-выражений, разделённых запятыми. 
На первый взгляд две вещи представляются не очень удобными: необходимость указывать разделитель :: и запятые между параметрами.

Параметры также принимает и команда lm:check, видимо для того чтобы проверить корректность параметров, ведь они представляют собой выражения.
Как мне пока представляется, от выражений тут только сложности и никакой выгоды.

Изменения затронули ещё и функцию eval, и опять же, я не вижу для чего это может вообще понадобиться (при наличии стандартной loadfile)


Возможно причина такого дизайна в том, что он проще в реализации. Или я чего-то не вижу.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaMacro — Lua как язык макросов

Post by Shmuel »

John Doe wrote:Изменения MCTL_SENDSTRING, MCTL_ADDMACRO пока в справке не описаны
Плохо смотрели.
John Doe wrote:Я почему-то ожидал, что передача параметров будет реализована так, как это принято в командных оболочках, но оказалось иначе:
[......]
На первый взгляд две вещи представляются не очень удобными: необходимость указывать разделитель :: и запятые между параметрами.
Да, от :: сильно пальчики устанут, а уж ставить запятые вместо пробелов - это же уйма лишней работы.
John Doe wrote:Параметры также принимает и команда lm:check, видимо для того чтобы проверить корректность параметров, ведь они представляют собой выражения.
Как мне пока представляется, от выражений тут только сложности и никакой выгоды.
Какие сложности для пользователя, можно пример?
John Doe wrote:Изменения затронули ещё и функцию eval, и опять же, я не вижу для чего это может вообще понадобиться (при наличии стандартной loadfile)
Изменения эти ничего не ломают. То-есть: не нравится - не пользуйтесь.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaMacro — Lua как язык макросов

Post by Shmuel »

John Doe wrote:Я почему-то ожидал, что передача параметров будет реализована так, как это принято в командных оболочках, но оказалось иначе:
[......]
Возможно причина такого дизайна в том, что он проще в реализации. Или я чего-то не вижу.
Вначале делал "как в командной оболочке", и почти сделал. Потом мне показалось, что использовать имеющийся Lua-парсер - это более надёжно, чем самопальный, который, кстати, можно сделать по-разному и нужно документировать. Думаю, что немногие понимают полностью синтаксис командной строки майкрософта и все тонкости с кавычками.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: LuaMacro — Lua как язык макросов

Post by John Doe »

Shmuel wrote:Да, от :: сильно пальчики устанут, а уж ставить запятые вместо пробелов - это же уйма лишней работы.
Существует вполне чёткая сто лет назад устоявшаяся практика указания параметров в командной строке через пробел.
Shmuel wrote:Какие сложности для пользователя, можно пример?
Рефлексы уже въелись в подкорку.
Shmuel wrote:Думаю, что немногие понимают полностью синтаксис командной строки майкрософта и все тонкости с кавычками.
Не спорю, есть определённые тонкости при передаче аргументов, содержащих пробелы или кавычки.
Но зачем нам майкрософт, ориентироваться предлагаю на lua.exe
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaMacro — Lua как язык макросов

Post by Shmuel »

John Doe wrote:Существует вполне чёткая сто лет назад устоявшаяся практика указания параметров в командной строке через пробел.
[......]
Рефлексы уже въелись в подкорку.
[......]
Не спорю, есть определённые тонкости при передаче аргументов, содержащих пробелы или кавычки.
Но зачем нам майкрософт, ориентироваться предлагаю на lua.exe
Аргументы насчёт устоявшейся практики и подкорки конечно действительны, но это - не обычная командная строка, да и подкорка быстро приспосабливается, если надо.

Преимущество передачи скрипту величин Lua любых типов (а не только стрингов, как это происходит в "традиционной" командной строке) тоже не следует недооценивать. Это позволяет освободить сами скрипты от "дешифровки" параметров комстроки и тем самым упростить их. Например, очень просто передать структурированные данные:

Code: Select all

lm:post @myscript.lua :: 5, {width=5,height=8}, "foo", {9,7,5,4}, true
John Doe, ваше мнение понятно, хотелось бы услышать ещё мнения (фар-тим ?).
Если мнений будет так же много, как по вопросу с неработающим на Windows 2000 LuaJIT, всё останется без изменений.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: LuaMacro — Lua как язык макросов

Post by zg »

Shmuel wrote:Потом мне показалось, что использовать имеющийся Lua-парсер - это более надёжно
+1.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: LuaMacro — Lua как язык макросов

Post by John Doe »

Shmuel wrote:очень просто передать структурированные данные:

Code: Select all

lm:post @myscript.lua :: 5, {width=5,height=8}, "foo", {9,7,5,4}, true
Того же самого можно добиться "классическим" способом:

Code: Select all

lm:post @myscript.lua "5, {width=5,height=8}, 'foo', {9,7,5,4}, true"
А в скрипте останется сделать loadstring
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Re: LuaMacro — Lua как язык макросов

Post by Smitis »

Мне тоже казалось, что будет как в командной строке. Имхо, если такой вызов вставить, например, в пользовательское меню, по принципу, один раз "вставил и забыл", то даже удобнее. А набирать каждый раз в командной строке... жесть.

У меня есть пример - язык kixtart. В нём параметры передаются в виде $var="значение" получая в скрипте переменную $var с нужным значением. В самом скрипте удобно - сразу можно использовать переменную $var. А в вызове _очень_ неудобно: при ошибке в имени переменной будет создана _не_та_ переменная и проконтроллировать это невозможно, и вместо простых каких-нибудь ключей вроде /a приходится городить что-то типа $par_a=1.
John Doe wrote:Того же самого можно добиться "классическим" способом
+1
Разум когда-нибудь победит.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: LuaMacro — Lua как язык макросов

Post by Max Rusov »

John Doe wrote:Того же самого можно добиться "классическим" способом:

Code: Select all

lm:post @myscript.lua "5, {width=5,height=8}, 'foo', {9,7,5,4}, true"
Как я понимаю, "то же самое классическим способом" должно выглядеть как то так:

Code: Select all

lm:post @myscript.lua 5 "{width=5,height=8}" "'foo'" "{9,7,5,4}" true
Не уверен, что это лучше
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: LuaMacro — Lua как язык макросов

Post by John Doe »

Max Rusov wrote:Как я понимаю, "то же самое классическим способом" должно выглядеть как то так:
Нет, такого не надо.
Достаточно поместить всё в 1 строку, а разбор (упрощённо) такой: local a, b, c, d, e = loadstring("return "..(...))()
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaMacro — Lua как язык макросов

Post by Shmuel »

Smitis wrote:Имхо, если такой вызов вставить, например, в пользовательское меню, по принципу, один раз "вставил и забыл", то даже удобнее. А набирать каждый раз в командной строке... жесть.
Не очень понятно, в чём жесть состоит. Чуть-чуть больше печатать из-за необходимости закавычивания строк, это уже жесть?

Code: Select all

1. lm:post @MyScript.lua foo bar
2. lm:post @MyScript.lua :: 'foo','bar'
Что касается разделителя :: , то он используется только для того, чтобы сделать закавычивание имени файла необязательным, например:

Code: Select all

lm:post @first time.lua :: 5,6
Продолжаем высказываться (желательно ещё не высказавшиеся, либо изменившие своё мнение).
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: LuaMacro — Lua как язык макросов

Post by zg »

насколько я понимаю текущее

Code: Select all

:: params
предлагается заменить на

Code: Select all

"params"
? и больше ничего?
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: LuaMacro — Lua как язык макросов

Post by John Doe »

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

А предлагается иное: передавать параметры как принято в системе, как делает это lua.exe
Т.е. просто @MyScript.lua foo bar, а не @MyScript.lua :: 'foo','bar'
2useven10
Posts: 5231
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 315 times

Re: LuaMacro — Lua как язык макросов

Post by 2useven10 »

имхо

Code: Select all

lm:post @"first time.lua" 5,6
более очевидный способ.
но вопрос совершенно не принципиальный. вполне можно принять предпочтения автора.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: LuaMacro — Lua как язык макросов

Post by zg »

John Doe wrote:Это лишь как частный случай, когда нужно использовать выражение lua, что актуально только при необходимости передачи скрипту таблиц, логических значений, определений функций...
у варианта с кавычками недостаток — нельзя кавычки внутри параметров использовать. если параметры откуда-то копипастятся — весьма неудобно.
А предлагается иное: передавать параметры как принято в системе, как делает это lua.exe
Т.е. просто @MyScript.lua foo bar, а не @MyScript.lua :: 'foo','bar'
удобство сомнительно, всевозможные неоднозначности и свой парсер.
2useven10 wrote:имхо

Code: Select all

lm:post @"first time.lua" 5,6
более очевидный способ.
но вопрос совершенно не принципиальный. вполне можно принять предпочтения автора.
+1.
Post Reply

Return to “Обсуждение макросов”