Помощь - Поиск - Пользователи - Календарь
Полная версия: # в Lua
UoKit.com Форумы > Кликер > UO Pilot
Levo222
Код
local A = {33; 4353; 234; 56345; 22; 435};
for i = 1, #A do A[Getinfo(A[i])],A[i] = true end


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

Levo222
Цитата(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

?
cirus
Код
--lua
local A = {}
log ("Размер массива: " .. #A)
A[#A+1] = 33
log ("Размер массива: " .. #A)
A[#A+1] = 4353
A[#A+1] = 234
log ("Размер массива: " .. #A)
Levo222
Цитата(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
И зачем мы вписываем цифры которые даже нигде не обозначаются?

Вобще что по умолчанию обозначают квадратные скобки?
{} --таблица
() -- данные обобщающие информацию
[] -- ссылка на ... ??
cirus
Цитата
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])

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

Обращение к элементу массива.
Levo222
Цитата(cirus @ 19.1.2020, 22:11) *

Код

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


А если в скрипте будет фигурировать другие значения равные 1, 2, 3 какие из них она возьмёт?
cirus
Может так понятнее:
Код
--lua
local A = {}
A[1] = 33
A[2] = 4353
A[3] = 234

log (A[1])
log (A[2])
log (A[3])
Levo222
Цитата(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

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

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

А еще какие приписки после переменной не позволяют считать её скрипту переменной?
cirus
Цитата
По факту эта запись
равна

Да.
Цитата
И если мы не пишем перед 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)  -- переменной не существует


Levo222
Что-то прояснилось
DarkMaster
Цитата
--lua
local A = {}
local A[1] = 33


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

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

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

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

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

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

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

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

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

# - считает индексы только которые состоят из циферок. Более того, если значение какого-либо элемента массива в середине будет равно 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

Естественно на практике # не перебирает все элементы массива. Значение постоянно хранится в служебных полях массива (слабой таблице).
Levo222
Цитата(DarkMaster @ 23.1.2020, 14:38) *

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

Что-то мне аж стихами это видится.
А что есть сильная таблица?
DarkMaster
Цитата
А что есть сильная таблица?

Вот это не знаю) Боюсь это из разряда Верхнего Новгорода.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.