Я в ужасе!! Кто-нибудь отзовитесь пожалуйста и скажите что это неправда!!

Страницы: 1
RSS
Я в ужасе!! Кто-нибудь отзовитесь пожалуйста и скажите что это неправда!!
 
Я  в УЖАСЕ!!!!

B={9,4,3,8}
C={}
C=B
C[1]=C[1]*0.5
table.sort(B)
message(tostring(C[1])..','..tostring(C[2])..','..tostring(C[3])..','..tostring(C[4]),1)

Ответ: 3,4,4.5,8

Это что правильно?
Через год работы с lua я узнаю вот такой прикол!! Почему об этом на каждом столбе не висит! И как с таким приколом можно вообще работать с этим языком? Если я просто ХОЧУ СКОПИРОВАТЬ ТАБЛИЦУ! Чума на оба ваших дома!
 
Если это всё правильно то зачем вообще операция "=" если она просто множит ссылки!
И как скопировать таблицу а не ссылку?
 
a = {4,7,8}

b = {}

for k,v in pairs(a) do b[k] = v end
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
А равно для чего? принципиально получается оно ничего не делает (для таблиц, писать тогда ошибку чтобы не вводить в заблуждение)! Смысла в нём нет если я буду вместо одного имени буду писать другое а производить операции по сути с одним и тем же объектом.
И ещё один вопрос это специфика конкретно этого языка или вообще?
 
Если позволите вдогонку ещё несколько вопросов.
вот это потокобезопасно?
-------------------------------
function OnAllTrade(alltrade)
A=alltrade.price+10-15+...
end

function main()
C=A+G
end
---------------------------------
 
Александр Иванов,
о том, что = не копирует, а присваивает ссылку, как раз "висит на каждом заборе". Почитайте любой интродакшн к языку Lua.
Впрочем, поздно, чума наверное уже поразила все бразильские дома...
 
согласен с "грином" - глупо критиковать LUA, имея только поверхностные знания о нём.
 
Примитивные типы присваиваются по значению, а составные/объектные - по ссылке.
Такая особенность вроде как практически во всех интерпретируемых языках программирования используется.

Александр, любопытно, а на чем Вы до Lua программировали, что это в такой "ужос" Вас ввергло? :)
 
Да спора нет, что сам виноват! Не ознакомился.
Но если никогда не занимался программированием, кроме как на бейсике на ZX Spektrum 48kb ;)) если кто помнит такой,
и не знаком со спецификой... Стереотип (в математике "=" так не используется) обывателя рвётся ...шок и т.п.

Но честно говоря так и не понял для чего операция  "=" для таблиц? Для общего развития поясните пожалуйста? Это ведь вводит в заблуждение..
 
Не согласен что висит на каждом заборе! Для специалиста фраза: "таблицы имеют ссылочный характер" в середине 100 страничного описания - говорит сразу обо всём. Для обывателя важен пример причём лучше прям в самом начале где то около hello world!!! Посмотрел бы я на вас если бы вы узнали к 7 классу что от перестановки мест слагаемых в некоторых случаях сумма меняется...
 
Одно из существенных достоинств луа это то, что таблицы не копируются а передаются указателем.
Это существенно ускоряет вычисления и экономит память, особенно в микроконтроллерах.
Если нужна копия таблицы, то надо делать явно через цикл.
 
А зачем нужна эта ссылка бери да изменяй объект напрямую по начальной ссылке.
Понимаете тут просто начинаются вопросы о простых вещах? а простые вещи они только на первый взгляд простые! Поменял одну аксиому и из Евклидовой геометрии перешёл к геометрии Лобачевского.
допустим:
t={}
t[1],t[2]={},{}
заполняем мы две таблицы содержимым и посмотрим на следующие варианты
c=t[1]
c=t[2]
t[2] то же ссылается на t[1] или только с сменила ссылку c t[1] на t[2]? Если принять - то что слева ссылается на то что справа то всё становится ясно.
а так
с=t[1]; t[1]=c или с=t[1]; t[2]=c; t[1]=t[2]
Поясните где что? А если смешать с тем , что было в первом сообщении!
 
Цитата
Александр Иванов пишет:
только с сменила ссылку c t[1] на t[2]
Чё-то у вас всё смешалось...
t[1],t[2]={},{} как были пустыми таблицами, так и остались.
Ссылка не есть равенство. Если вы удалите с, то с t[1] и t[2] ничего не произойдёт.

Цитата
Николай Камынин пишет:
Если нужна копия таблицы, то надо делать явно через цикл.
Т.е, достоинство Lua является её же недостатком.
Надо делать так, как надо. А как не надо - делать не надо.
 
Нет,
предположим, что нет этого достоинства (передача по указателю)
Что тогда?
тогда остается лишь копирование по циклу.
Т е то что есть без достоинства.
Если язык допускает присвоение таблиц (например MATLAB) то цикл будет неявным,
а если такого оператора нет (например паскаль) то цикл будет явным либо в виде функции.
Т е достоинства лишь предполагают внимательное изучение языка и приобретения навыков мышления на нем.
 
Страницы: 1
Читают тему
Наверх