:global cuDte do={return ([/system clock get date]." ".[/system clock get time]);}
:global cuDte1 do={([/system clock get date]." ".[/system clock get time]);}
:log info [$cuDte]
:log info [$cuDte1]
:log info [len [$cuDte1]]
:log info [typeof [$cuDte]]
:log info [typeof [$cuDte1]]
В первом случае объявляется функция, возвращающая строку, во втором - возвращается массив даже без :return
Кто-нибудь может объяснить логику поведения ?
забавные коллизии скриптового языка Микротик
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
-
- Сообщения: 1657
- Зарегистрирован: 15 сен 2017, 09:03
-
- Сообщения: 1657
- Зарегистрирован: 15 сен 2017, 09:03
Вероятно для РОС при
:global var do={([/system clock get date]." ".[/system clock get time]);}
происходит объявление массива, аналогично
:global var {:}
но с добавлением туда второго элемента конкатенацией ([/system clock get date]." ".[/system clock get time])
Почему это работает так - это бред разработчиков так как и возможность объявлять массивы без инициализации или так нужно для чего-то ?
:global var do={([/system clock get date]." ".[/system clock get time]);}
происходит объявление массива, аналогично
:global var {:}
но с добавлением туда второго элемента конкатенацией ([/system clock get date]." ".[/system clock get time])
Почему это работает так - это бред разработчиков так как и возможность объявлять массивы без инициализации или так нужно для чего-то ?
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Сообщения: 164
- Зарегистрирован: 23 июл 2013, 18:47
Совсем с ясельного уровня объяснять не буду и конструкцию вида
опущу. Думаю вам понятно, что здесь происходит.
Скажу лишь, что в обоих случаях синтаксис позволяет опустить в конце ";". Точка с запятой используется для указания нескольких действий в одной строке.
теперь по вопросу - в обоих случаях в объявляете функцию, но в первом случае вы указываете что из функции должно вернуться, а во втором нет.
Теперь вспоминаем - код в любом языке выполняется последовательно(если не используются конструкции многопоточности). Возврат из функции может быть и не нужен.
Разбираем ваш пример:
дойдя до этой строки
Сама структура массива не документирована, но я на просторах инета встречал подробное описание структуры вместе с примерами. Если не изменяет память это было где то на stackoverflow
Код: Выделить всё
([/system clock get date]." ".[/system clock get time])
опущу. Думаю вам понятно, что здесь происходит.
Скажу лишь, что в обоих случаях синтаксис позволяет опустить в конце ";". Точка с запятой используется для указания нескольких действий в одной строке.
теперь по вопросу - в обоих случаях в объявляете функцию, но в первом случае вы указываете что из функции должно вернуться, а во втором нет.
Теперь вспоминаем - код в любом языке выполняется последовательно(если не используются конструкции многопоточности). Возврат из функции может быть и не нужен.
Разбираем ваш пример:
дойдя до этой строки
точка выполнения переходит на действие [] , то есть точка прыгает внутрь функции и выполняет код внутри функции. Когда код выполнен, а возврат не указан, как перейти из функции обратно туда от куда была вызвана функция? Всё очень просто - функция всегда возвращает результат своих действий в виде массива, а указание return, это всего лишь одно из значений этого массива.:log info [$cuDte1]
Сама структура массива не документирована, но я на просторах инета встречал подробное описание структуры вместе с примерами. Если не изменяет память это было где то на stackoverflow
-
- Сообщения: 1657
- Зарегистрирован: 15 сен 2017, 09:03
Насчет ясельного уровня спасибо, вот только Вас никто ведь не пытался обидеть ... Я писал такие вещи на Ассемблере, какие многим и профи не снились, а такие как Вы тогда ещё пешком под стол ходили, так что не надо ... С языками высогоко уровня да, не дружил никогда. Когда я был в силе их просто не было почти. И с чего Вы взяли, что функция всегда возвращает массив ? В каком языке программирования и каком году тогда уточняйте. Вы хоть немного историю развития программирования знаете ?
А вы решили объяснять батюшке что такое церковь - да ... Нет с вами можно разговаривать только накушавшись изрядно гороху ...
А это вообще ни в какие ворота. Причём тут как перейти обратно туда откуда была вызвана функция и возврат данных из нее ? Функция это подпрограмма - положи на стек адрес возврата и процессор вернет тебя туда откуда тебя вызвали. Я не просил объяснять какие-то азы программирования - Вы школьный учитель что-ли ? Была просьба объяснить конретное поведение скриптового языка Микротик - какого хрена он при объявлении функции возвращает массив данных, когда его об этом не просили ? Это вероятно наследие Lua или правила поведения подобных языков, мне это не понятно, так как мы таких языков не писали никогда, даже в молодости.как перейти из функции обратно туда от куда была вызвана функция? Всё очень просто - функция всегда возвращает результат своих действий в виде массива, а указание return, это всего лишь одно из значений этого массива.
А вы решили объяснять батюшке что такое церковь - да ... Нет с вами можно разговаривать только накушавшись изрядно гороху ...
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947