View Issue Details

IDProjectCategoryView StatusLast Update
0002244WishesMacropublic2013-03-19 18:00
ReporterAidar Assigned To 
PrioritynormalSeverityfeatureReproducibilityalways
Status newResolutionopen 
Platformx64OSWindows 
Product Version3.0 
Summary0002244: Макро-функция print с поддержкой нескольких параметров
DescriptionПредлагаю расширить print для передачи нескольких параметров вместо использования конкатенации (либо добавить отдельную функцию, например, с названием prints).
Steps To ReproduceВместо
print(a..tostring(b)..c)
или
printf("%s%d%s", a, b, c)
можно будет писать
prints(a, b, c)
Additional InformationКод:
function _G.prints (...)
  for n=1,select("#",...) do
     co_yield(PROPAGATE, F.MPRT_PRINT, tostring(select(n,...)))
  end
end
TagsNo tags attached.
Build

Activities

Aidar

2013-01-06 11:08

reporter   bugnote:0009934

Last edited: 2013-01-06 11:10

View 4 revisions

Предложенный код проверен:
- вписал код в luamacro.lua,
- вызвал prints с двумя параметрами,
- вызов отработан успешно.
Название не принципиально. Если нововведение скажется на скорости работы макроса, лучше сделать отдельной функцией.

Aidar

2013-01-06 11:11

reporter   bugnote:0009935

Ссылка на форум:
http://forum.farmanager.com/viewtopic.php?f=3&t=7302&p=101963#p101961

JohnDoe

2013-03-19 09:04

updater   bugnote:0010550

Название желательно сохранить, чтобы максимально приблизить поведение к штатной функции Lua.

max rusov

2013-03-19 13:27

reporter   bugnote:0010551

Что то я не вижу принципиальной разницы между

print(a..b..c)

и

print(a, b, c)

JohnDoe

2013-03-19 13:32

updater   bugnote:0010552

Когда a,b,c строки - то да.
А если вдруг попадётся таблица, функция или nil - увидите разницу

Aidar

2013-03-19 13:39

reporter   bugnote:0010553

Проблема ещё и с производительностью:
конкатенация строк количеством больше трёх не рекомендуется.

JohnDoe

2013-03-19 13:46

updater   bugnote:0010554

Last edited: 2013-03-19 13:47

View 3 revisions

Не думаю, что разницу в производительности можно заметить, для меня это скорее вопрос удобства.

А разница ещё и в том, что print (из Lua) добавляет отступ
Примерно так
print(a, b, c)
print(a.." "..b.." "..c)

P.S.
Мантис съел пробелы, там их по 5

max rusov

2013-03-19 13:54

reporter   bugnote:0010555

Как то это спорно. IMHO, само ничего добавляться не должно. Т.е должна быть простая конкатенация. А в этом случае преимуществ мало, так как строки и числа и так конкатенируются, т.е. "tostring" - не нужен. Насчет таблиц - не знаю

JohnDoe

2013-03-19 13:59

updater   bugnote:0010556

Last edited: 2013-03-19 14:01

View 4 revisions

Тут не надо ничего знать.
Функция print стандартная в Lua, её поведение известно.
И предлагаемое изменение совместимо с имеющимся кодом (т.е. с вашими старыми макросами)

А, забыл ещё один бунус - print(ConsoleControl.BufferSize()) напечатает оба размера.

max rusov

2013-03-19 14:02

reporter   bugnote:0010558

Last edited: 2013-03-19 14:02

View 2 revisions

Вот видите - уже несовместимо (раньше печаталась одна цифра, теперь две).
Мне, конечно, все равно. Только "пять пробелов" что-то не нравятся...

JohnDoe

2013-03-19 14:04

updater   bugnote:0010559

Last edited: 2013-03-19 14:15

View 3 revisions

Я говорил о старых макросов. Раньше не могло быть 2х возвращаемых значений.

А в новых макросах это легко учесть.
(Если нужен только первый - просто взять в скобки.)

JohnDoe

2013-03-19 14:20

updater   bugnote:0010561

Last edited: 2013-03-19 14:35

View 2 revisions

С другой стороны я понимаю, что тут есть специфика.

Возможно действительно сделать 2 разных функции.
А возможно стоит просто разделить print() и mf.print()

JohnDoe

2013-03-19 14:34

updater   bugnote:0010562

Не знаю с чего я взял 5 пробелов, на самом деле 1 табуляция

Aidar

2013-03-19 17:19

reporter   bugnote:0010563

Last edited: 2013-03-19 17:22

View 3 revisions

Странно, у меня ничего не вставляет: печатает подряд, как и должно быть.
== Вот макрос для тестирования:
Macro {
  area = "Editor",
  key = "CtrlH",
  flags = "",
  description = "Edit: Test",
  action = function ()
    prints("test")
    return prints("abc", 10, "def")
  end, ---
} ---
== Выводит при срабатывании
testabc10def

JohnDoe

2013-03-19 17:35

updater   bugnote:0010565

Last edited: 2013-03-19 17:37

View 3 revisions

Имелась ввиду не ваша функция "prints", а стандартная функция Lua "print".
То что она вставляет разделитель - весьма удобно.

JohnDoe

2013-03-19 17:45

updater   bugnote:0010566

Last edited: 2013-03-19 17:45

View 2 revisions

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

Aidar

2013-03-19 17:56

reporter   bugnote:0010567

Last edited: 2013-03-19 17:57

View 2 revisions

Так может получиться:

local print = print
function _G.prints (...)
  for n=1,select("#",...) do
     print((select(n,...)))
  end
end

JohnDoe

2013-03-19 18:00

updater   bugnote:0010568

Действительно )

Issue History

Date Modified Username Field Change
2013-01-06 11:06 Aidar New Issue
2013-01-06 11:08 Aidar Note Added: 0009934
2013-01-06 11:08 Aidar Note Edited: 0009934 View Revisions
2013-01-06 11:10 Aidar Note Edited: 0009934 View Revisions
2013-01-06 11:10 Aidar Note Edited: 0009934 View Revisions
2013-01-06 11:11 Aidar Note Added: 0009935
2013-03-19 09:04 JohnDoe Note Added: 0010550
2013-03-19 13:27 max rusov Note Added: 0010551
2013-03-19 13:32 JohnDoe Note Added: 0010552
2013-03-19 13:39 Aidar Note Added: 0010553
2013-03-19 13:46 JohnDoe Note Added: 0010554
2013-03-19 13:47 JohnDoe Note Edited: 0010554 View Revisions
2013-03-19 13:47 JohnDoe Note Edited: 0010554 View Revisions
2013-03-19 13:54 max rusov Note Added: 0010555
2013-03-19 13:59 JohnDoe Note Added: 0010556
2013-03-19 13:59 JohnDoe Note Edited: 0010556 View Revisions
2013-03-19 14:00 JohnDoe Note Edited: 0010556 View Revisions
2013-03-19 14:01 JohnDoe Note Edited: 0010556 View Revisions
2013-03-19 14:02 max rusov Note Added: 0010558
2013-03-19 14:02 max rusov Note Edited: 0010558 View Revisions
2013-03-19 14:04 JohnDoe Note Added: 0010559
2013-03-19 14:05 JohnDoe Note Edited: 0010559 View Revisions
2013-03-19 14:15 JohnDoe Note Edited: 0010559 View Revisions
2013-03-19 14:20 JohnDoe Note Added: 0010561
2013-03-19 14:34 JohnDoe Note Added: 0010562
2013-03-19 14:35 JohnDoe Note Edited: 0010561 View Revisions
2013-03-19 17:19 Aidar Note Added: 0010563
2013-03-19 17:21 Aidar Note Edited: 0010563 View Revisions
2013-03-19 17:22 Aidar Note Edited: 0010563 View Revisions
2013-03-19 17:35 JohnDoe Note Added: 0010565
2013-03-19 17:37 JohnDoe Note Edited: 0010565 View Revisions
2013-03-19 17:37 JohnDoe Note Edited: 0010565 View Revisions
2013-03-19 17:45 JohnDoe Note Added: 0010566
2013-03-19 17:45 JohnDoe Note Edited: 0010566 View Revisions
2013-03-19 17:56 Aidar Note Added: 0010567
2013-03-19 17:57 Aidar Note Edited: 0010567 View Revisions
2013-03-19 18:00 JohnDoe Note Added: 0010568