Здравствуйте, гость ( Вход | Регистрация )

> lua, таблица, вызов функции, Отбросить в функции последнее поле таблицы
фонарик
сообщение 7.4.2021, 1:42
Сообщение #1


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



Код
--lua
table = {'Год', 'Месяц', 'День'}
table["Год"] = {'2020', '2021', '2022'}
table["Месяц"] = {'Январь', 'Февраль', 'Март'}
table["Месяц"]["Январь"] = {'Утро', 'День', 'Вечер'}
table["Месяц"]["Февраль"] = {'Вечер'}

function DATA(tbl)
  NewDATA = table["Месяц"]["Январь"] -- как отбросить ["Январь"] ?
  return NewDATA
end

e = DATA(table["Месяц"]["Январь"])
msg(unpack(e))

В функцию DATA передается таблица table["Месяц"]["Январь"]. Т.е 3 значения: 'Утро', 'День', 'Вечер'. Как в функции обрезать последнее поле ["Январь"] ? Чтобы функция вернула table["Месяц"] ? Т.е значения 'Январь', 'Февраль', 'Март' ? (IMG:style_emoticons/default/unsure.gif) Подскажите пожалуйста (IMG:style_emoticons/default/beg.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
фонарик
сообщение 10.4.2021, 22:06
Сообщение #2


****

Apprentice
Сообщений: 145
Регистрация: 23.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.305



(IMG:style_emoticons/default/yahoo.gif) (IMG:style_emoticons/default/yahoo.gif) (IMG:style_emoticons/default/yahoo.gif)

lua
Код
--lua
local h = require'prompt'

t = {'Год', 'Месяц', 'День', 'стоп'}
t["Год"] = {'2020', '2021', '2022', 'назад', 'стоп'}
t["День"] = {'Понедельник', 'Вторник', 'назад', 'стоп'}
t["Месяц"] = {'Январь', 'Февраль', 'Март', 'назад', 'стоп'}
t["Месяц"]["Январь"] = {'Утро', 'День', 'Вечер', 'назад', 'стоп'}
t["Месяц"]["Февраль"] = {'Вечер', 'назад', 'стоп'}

log 'clear' log 'mode compact'

function MyPrompt (t, n, prev)

  n = h.lua_prompt(t)

  if  type(t[t[n]]) == 'table' then
    if prev[#prev] ~= t then
      prev[#prev+1] = t
    end
    t2 = t[t[n]]
    return t2, n, prev
    else

    if  t[n] == 'назад' then
      if #prev > 1 then
        t2 = prev[#prev]
        table.remove(prev)

        return t2, n, prev
      end
      t2 = prev[#prev]
      return t2, n, prev
    end

    if  t[n] == 'стоп' then
      end_script()
    end

    t2 = t[n]
    return t2
  end

end

prev = {t}
n = h.lua_prompt(t)
t = t[t[n]]

::u::

t, n, prev = MyPrompt (t, n, prev)

if  type(t) == 'table' then
  goto u
  else
  msg(t)
  end_script()
end

Действительно, изначальную таблицу t нельзя трогать (IMG:style_emoticons/default/smile.gif) А prev стал неким аналог истории, который впитал в себя таблицы, в которых пользователь сделал выбор.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 10.4.2021, 22:21
Сообщение #3


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2343
Пользователь №: 18.746



фонарик, обрати внимание на еще одну особенность.

К сожалению, в луа переменные по умолчанию создаются в глобальной области видимости,
так что при инициализации переменной внутри функции, нужно использовать модификатор local,
чтобы она не существовала за ее пределами.
Пример:
--lua
log "clear";log "mode compact"

t = {}

function set(n)
local m = n * 2
return m
end

t[1] = set(5)
log(t[1])


Сообщение отредактировал Fors1k - 10.4.2021, 22:35


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
фонарик   lua, таблица, вызов функции   7.4.2021, 1:42
cirus   Лучше напишите что вообще хотите сделать. table не...   7.4.2021, 2:10
фонарик   Я пытаюсь при помощи вашего плагина Prompt пообщат...   7.4.2021, 4:00
DarkMaster   Пилотом может и не зарезервировано, а вот в луа я...   7.4.2021, 10:13
фонарик   Пользователь путем многоуровневого Prompt (выбор с...   7.4.2021, 14:12
Madeus   Пользователь путем многоуровневого Prompt (выбор ...   7.4.2021, 14:35
Madeus   Вроде работает --lua t = {'Год', 'Меся...   7.4.2021, 15:10
фонарик   Madeus, да, вот то что я задумывал, но к сожалению...   7.4.2021, 17:52
cirus   Суть примерно такая, остальное по аналогии. --lua ...   8.4.2021, 3:58
фонарик   --lua local h = require'prompt' t = {...   9.4.2021, 21:41
cirus   После этого уже не существует изначальной таблицы...   10.4.2021, 2:24
DarkMaster   Я долго пытался понять, как мне кажется речь о то...   10.4.2021, 5:47
Fors1k   таблицы в луа не копируются Так во всех языках (п...   10.4.2021, 17:14
DarkMaster   Прям напрямую - нет, копировать нельзя. Обычно вот...   10.4.2021, 18:13
cirus   unpack(org)   10.4.2021, 18:23
DarkMaster   Копипастил) Я этот код не юзаю - у меня комбайн. ...   10.4.2021, 18:54


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 29.4.2024, 16:04
Designed by Nickostyle