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

 
Ответить в эту темуОткрыть новую тему
> # в Lua, - // -
Levo222
сообщение 19.1.2020, 17:06
Сообщение #1


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Код
local A = {33; 4353; 234; 56345; 22; 435};
for i = 1, #A do A[Getinfo(A[i])],A[i] = true end


что такое выражение обозначает?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 19.1.2020, 17:30
Сообщение #2


**********

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



# - размер массива.
Код
--lua
local A = {33, 4353, 234, 56345, 22, 435}
log ("Размер массива: " .. #A)
for i = 1, #A do
    log (A[i])
end

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 19.1.2020, 17:50
Сообщение #3


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(cirus @ 19.1.2020, 21:30) *

# - размер массива.
Код
--lua
local A = {33, 4353, 234, 56345, 22, 435}
log ("Размер массива: " .. #A)
for i = 1, #A do
    log (A[i])
end


А т.е. по факту это более упрощенная запись:
Код
--lua
local A = {33, 4353, 234, 56345, 22, 435}
local B = 6
for i = 1, 6 do
    log (A[i])
end

?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 19.1.2020, 17:58
Сообщение #4


**********

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



Код
--lua
local A = {}
log ("Размер массива: " .. #A)
A[#A+1] = 33
log ("Размер массива: " .. #A)
A[#A+1] = 4353
A[#A+1] = 234
log ("Размер массива: " .. #A)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 19.1.2020, 18:02
Сообщение #5


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(cirus @ 19.1.2020, 21:58) *

Код
--lua
local A = {}
log ("Размер массива:"..#A)
A[#A+1]=33
log ("Размер массива:"..#A)
A[#A+1]=4353
log ("Размер массива:"..#A)
A[#A+1]=234
log ("Размер массива:"..#A)


Код
 Размер массива:0
Размер массива:1
Размер массива:2
Размер массива:3

A[#A+1] = 4353
И зачем мы вписываем цифры которые даже нигде не обозначаются?

Вобще что по умолчанию обозначают квадратные скобки?
{} --таблица
() -- данные обобщающие информацию
[] -- ссылка на ... ??
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 19.1.2020, 18:11
Сообщение #6


**********

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



Цитата
A[#A+1] = 4353
И зачем мы вписываем цифры которые даже нигде не обозначаются?

Код
--lua
local A = {}
log ("Размер массива: " .. #A)
A[#A+1] = 33
log ("Размер массива: " .. #A)
A[#A+1] = 4353
log ("Размер массива: " .. #A)
A[#A+1] = 234
log ("Размер массива: " .. #A)

log (A[1])
log (A[2])
log (A[3])

Цитата
[] -- ссылка на ... ??

Обращение к элементу массива.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 19.1.2020, 18:13
Сообщение #7


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(cirus @ 19.1.2020, 22:11) *

Код

log (A[1])
log (A[2])
log (A[3])


А если в скрипте будет фигурировать другие значения равные 1, 2, 3 какие из них она возьмёт?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 19.1.2020, 18:26
Сообщение #8


**********

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



Может так понятнее:
Код
--lua
local A = {}
A[1] = 33
A[2] = 4353
A[3] = 234

log (A[1])
log (A[2])
log (A[3])
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 19.1.2020, 18:32
Сообщение #9


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(cirus @ 19.1.2020, 22:11) *

[]
Обращение к элементу массива.

Т.е. к тому, который стоит перед скобкой?

По факту эта запись

Код
--lua
local A = {}
A[1] = 33
A[2] = 4353
A[3] = 234

log (A[1])
log (A[2])
log (A[3])


равна

Код
--lua
local A = {33, 4353, 234}
log (A[1])
log (A[2])
log (A[3])


?

И если мы не пишем перед A[1] local в таком выражении

Код
--lua
local A = {}
A[1] = 33


Т.е. чем отличается
Код
--lua
local A = {}
local A[1] = 33

ошибку почему-то выдаёт

Будет ли она являться глобальной переменной? Или при обращении к элементу массива она не считается переменной вообще?

А еще какие приписки после переменной не позволяют считать её скрипту переменной?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 19.1.2020, 19:03
Сообщение #10


**********

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



Цитата
По факту эта запись
равна

Да.
Цитата
И если мы не пишем перед A[1] local
Будет ли она являться глобальной переменной?

Будет глобальной, только смысла нет. Переменные, объявленные вначале скрипта, для всего скрипта будут глобальными.
Код
--lua
local A = 33  -- переменная видна в любом месте скрипта

log "clear"  log "mode compact"
do
    local B = 11  -- переменная видна только в блоке do end
    log ("A равно " .. A)
    log ("B равно " .. B)
    log("")
    for i = 0, 5 do  -- переменная i видна только в блоке for end
       log ("i = " .. i)
    end
    log("")
end

log (A)
log (B)  -- переменной не существует
log (i)  -- переменной не существует


Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 19.1.2020, 20:22
Сообщение #11


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



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


***********

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



Цитата
--lua
local A = {}
local A[1] = 33


ошибку почему-то выдаёт

Повторно объявлять local для одной и той же переменной не стоит (массив по сути то же переменная), тут вы так же объявляете local элементу массива, а не ему целиком - вполне логично вылетает ошибка.

Цитата
# - размер массива.

Никак нет. Это размер. Не массива. Точнее не обязательно массива. Стринги тоже можно. А вот с массивом он покажет только количество элментов с цифровыми индексами. Т.е.:
local arr = {}
arr[1] = 1
arr[2] = 2
arr["sdv"] = sdv
log(#arr) -- Вывод будет ДВА.

Сообщение отредактировал DarkMaster - 23.1.2020, 10:26


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


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(DarkMaster @ 21.1.2020, 20:49) *

Повторно объявлять local для одной и той же переменной не стоит (массив по сути то же переменная), тут вы так же объявляете local элементу массива, а не ему целиком - вполне логично вылетает ошибка.

Так я и понял, он ошибку выдал.

Цитата(DarkMaster @ 21.1.2020, 20:49) *

log(#arr) -- Вывод будет ДВА.

А вот это посложнее
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 23.1.2020, 10:38
Сообщение #14


***********

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



Цитата
А вот это посложнее

# - считает индексы только которые состоят из циферок. Более того, если значение какого-либо элемента массива в середине будет равно nil, то вы получите количество элементов до nil.

Если в коде, то для массива # по СМЫСЛУ представляет собой тоже самое, что:

Код

-- arr некоторый массив количество
-- элементов которого вычисляется

local result = 0
local i = 1
while arr[i] ~= nil do
    result = result + 1
    i = i + 1
end

log(result)



arr[1] = 1
arr[2] = 2
arr[3] = 3
результат 3

arr[1] = 1
arr[2] = nil
arr[3] = 3
результат 1

arr[1] = 1
arr[2] = 2
arr["ywfp"] = 3
результат 2

arr["a"] = 1
arr["b"] = 2
arr["c"] = 3
результат 0

Естественно на практике # не перебирает все элементы массива. Значение постоянно хранится в служебных полях массива (слабой таблице).

Сообщение отредактировал DarkMaster - 23.1.2020, 10:41


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


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Цитата(DarkMaster @ 23.1.2020, 14:38) *

в служебных покоях царицы(полях слабой таблицы).

Что-то мне аж стихами это видится.
А что есть сильная таблица?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 24.1.2020, 16:01
Сообщение #16


***********

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



Цитата
А что есть сильная таблица?

Вот это не знаю) Боюсь это из разряда Верхнего Новгорода.


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

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

 

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