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

 
Ответить в эту темуОткрыть новую тему
> Использование переменной\массива в имени переменной и массива
3axap
сообщение 11.1.2016, 12:55
Сообщение #1


*

Registred
Сообщений: 4
Регистрация: 8.9.2015
Группа: Пользователи
Наличность: 0
Пользователь №: 17.618
Возраст: 35



День добрый.
Подскажите, возможно\планируется ли реализовать использование переменной\массива в имени переменной и массива?
Пример

Код
set #fc 3

set %Depcow[1 1] 111
set %Deppig[1 1] 211
set %Depsable[1 1] 311

set %animal[1 1] cow
set %animal[2 1] pig
set %animal[3 1] sable
set #ac size (%animal)

set #z1 0
for #z1 1 #fc
    set #z 0
    for #z 1 #ac
        set #tmp #ac + #z1
        set $tmp #tmp
        set $animal %animal[#z 1]
        set %SQ$animal[#z1 1] $tmp
        set %SQ$animal[#z1 2] %Dep$animal[#z1 1]
        set %SQ%animal[#z 1][#z1 4] $tmp
        log %SQ%animal[#z 1][#z1 4] %SQ$animal[#z1 2] %SQ$animal[#z1 1]
        end_for
end_for

end_script
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 11.1.2016, 12:58
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27721
Пользователь №: 11.279



А зачем? Обычно это решается массивами. Через eval я где-то многомерные массивы описывал, как делать, думаю по аналогичной схеме может получиться.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
3axap
сообщение 11.1.2016, 13:41
Сообщение #3


*

Registred
Сообщений: 4
Регистрация: 8.9.2015
Группа: Пользователи
Наличность: 0
Пользователь №: 17.618
Возраст: 35



Имеются объекты над которыми нужно производить одинаковые операции. Сейчас их 3. Код на 1000+ строк. Хотелось бы сократить раза в 3-4 используя сею фичу. Плюс заложить возможность без проблемного расширения количества объектов путем не наращивания объема кода а добавлением дополнительных переменных.
Что за eval? не могу найти как его можно использовать...
Из описаного Вами примера сложно понять как это должно работать.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 11.1.2016, 14:28
Сообщение #4


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26706
Пользователь №: 16.971
Возраст: 29



код
Код
set %Depcow[1 1] 111
set %Deppig[1 1] 211
set %Depsable[1 1] 311

set %animal[1 1] cow
set %animal[2 1] pig
set %animal[3 1] sable


//вывод в лог
for #i 1 size(%animal)
log eval (%Dep%animal[#i 1][1 1])
end_for

//назначение переменных
set %a [1] %Dep
for #i 1 size(%animal)
eval (set %a[1]%animal[#i 1][1 1] #i)
end_for
log %Depcow[1 1]   %Deppig[1 1]   %Depsable[1 1]
stop_script

Хотя никакого смысла в этом не вижу. Сложно для понимания, читаемости 0, никаких гарантий что будет корректно работать. Проще обычными массивами всё делать.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
3axap
сообщение 11.1.2016, 15:40
Сообщение #5


*

Registred
Сообщений: 4
Регистрация: 8.9.2015
Группа: Пользователи
Наличность: 0
Пользователь №: 17.618
Возраст: 35



Спасибо! Вариант с "set %a [1] %Dep" помог заставить работать eval.
Вот что получилось у меня

Код
set #fc 1

set %Depcow[1 1] 111
set %Deppig[1 1] 211
set %Depsable[1 1] 311

set %animal[1 1] cow
set %animal[2 1] pig
set %animal[3 1] sable
set #ac size (%animal)
set %a[1] %SQ
set %a[2] %Dep

set #z1 0
for #z1 1 #fc
    set #z 0
    for #z 1 #ac
        set #tmp eval (%a[2]$animal[#z1 1])
        set $tmp #tmp
        set $animal %animal[#z 1]
        eval (set %a[1]$animal[#z1 1] $tmp)
        eval (set %a[1]$animal[#z1 2] %a[2]$animal[#z1 1])
        eval (set %a[1]%animal[#z 1][#z1 4] $tmp)
        log eval(%SQ%animal[#z 1][#z1 1] %a[1]$animal[#z1 2] %a[1]%animal[#z 1][#z1 4])
        end_for
end_for
log eval(%a[2]%animal[1 1] %a[2]%animal[2 1] %a[2]%animal[3 1])
end_script
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 18.7.2019, 19:44
Сообщение #6


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1319
Пользователь №: 18.346
Возраст: 25



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

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

 

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