Страница 1 из 1
Как работает команда
Добавлено: 05 июн 2020, 10:25
Sertik
В одном скрипте Dragon Knight нашел вот это:
:local key ([:terminal inkey] - 48)
Такая команда будет работать только в терминале ? Из скрипта нельзя сделать ввод символа с клавиатуры ?
Re: Как работает команда
Добавлено: 05 июн 2020, 11:16
podarok66
Давайте рассуждать. :terminal inkey используется при интерактивном диалоге. Например :local key [:terminal inkey] будет ожидать нажатия клавиши и сохранит её ASCII представление в переменную key. Для y это будет 121, для n будет 110. Как это использовать в скрипте, который выполняется в фоне?
Re: Как работает команда
Добавлено: 05 июн 2020, 20:08
Sertik
Не понял совсем ничего. Кроме того, что да, в скрипте, это вероятно вообще никак использовать нельзя.
А в терминале пробовал - странная вещь выходит (с моей точки зрения):
Например,
:put "enter a character using the keyboard"
:local key ([:terminal inkey]-48)
:put $key
:put [:typeof $key]
Почему, выполняясь из терминала программа не ждет ввода с клавиатуры и не печатает на экран ни код введенного символа ни тип переменной $key ?
Re: Как работает команда
Добавлено: 06 июн 2020, 12:47
podarok66
Это я сейчас не понял. Раскладка клавиатуры английская.
Код: Выделить всё
[podarok66@RB750Gr3] > {{:put "enter a character using the keyboard"
{{... :local key ([:terminal inkey]-48)
{{... :put $key
{{... :put [:typeof $key]}}
Нажимаем
Enter
Я опять нажал
Enter, так как терминал оказался в режиме ожидания
Что, по вашему, другое должно было случиться? Может вы перед этим с терминале нажимали Ctrl+v ?
Re: Как работает команда
Добавлено: 09 июн 2020, 10:21
Sertik
Да, работает.
У меня вот этот код не был заключен в фигурные скобки как у Вас
:put "enter a character using the keyboard"
:local key ([:terminal inkey]-48)
:put $key
:put [:typeof $key]
{:put "enter a character using the keyboard"
:local key ([:terminal inkey]-48)
:put $key
:put [:typeof $key]}
Поэтому никакого ожидания нажатия на клавишу не происходило. Кстати почему так ?
Так и не понял почему блок кода для выполнения в терминале правильно заключать в фигурные скобки ?
Re: Как работает команда
Добавлено: 09 июн 2020, 21:59
podarok66
Sertik писал(а): ↑09 июн 2020, 10:21
Так и не понял почему блок кода для выполнения в терминале правильно заключать в фигурные скобки ?
Насколько я понимаю, если не заключать код в фигурные скобки, то каждая команда завершается либо
; либо символом новой строки. Если заключить какой либо код в фигурные скобки, получаем локальную область, которая определяет свои переменные, не видные за скобками, но включает переменные, которые были определены на порядок выше. Все команды в такой области должны быть выполнены, так как рассматриваются системой, как одна строка. Верно и обратное:
каждая строка, записанная в терминале, рассматривается как локальная область видимости. Поэтому вставляя в Терминал код из нескольких строк, получаем, что каждая строка определена лишь для себя самой и не определена для всех остальных.
Фух... Сумбурно, но я никогда не был силён в теоретезировании.
Re: Как работает команда
Добавлено: 10 июн 2020, 09:24
Sertik
Спасибо, не сумбурно, а очень нормально. Согласно Вашему последнему предложению (обратное утверждение) - это что же получается, что если код исполняемый в терминале не заключен в фигурные скобки например, состоит из нескольких строк, в одной строке допустим определяется переменная, а вторая строка про неё уже ничего не знает ? Вот здорово ! Значит нужно всё что для терминала заключать в фигурные скобки !
Re: Как работает команда
Добавлено: 10 июн 2020, 12:28
podarok66
Ну да, так оно и есть. Вот простейший эксперимент:
Код: Выделить всё
[podarok66@RB750Gr3] > :local t "Hello"
[podarok66@RB750Gr3] > :put $t
[podarok66@RB750Gr3] >
Как мы видим, переменная t оказывается необъявленной во второй строке. Несмотря на то, что в первой мы её объявляли. Как-то так
