Size: a a a

2021 September 22

DS

Daniil Smolyakov in pro.lua
Нужны сравнительные тесты, чтобы увидеть, что это не просто стек от вызовов.
источник

AZ

Aydar Zarifullin in pro.lua
По-моему не надо завязываться на недокументированную фичу зависящую от реализации, соответственно смысла тестировать это тоже нет.
источник

DS

Daniil Smolyakov in pro.lua
Пока непонятно, почему недокументированную.
Мы же из доки эту инфу почерпнули. Причём из официальной.

И реализация с учётом необходимости хранения данных для замыкания, как мы поняли, начинается с 5.2

Но я поддерживаю идею, что чем гибче язык, тем строже на нем надо писать, чтобы уменьшить количество ошибок.
Просто хотелось до конца разобраться в этом кейсе.
источник

AZ

Aydar Zarifullin in pro.lua
Вот это? Так тут же не описано что за observable difference пока конкретно не напишут мы не можем знать как именно реализация сравнивает содержимое функций а значит и не можем знать в каком случае функция будет переиспользована а в каком создана новая.
источник

DS

Daniil Smolyakov in pro.lua
Скорее это)
В 5.2 многое переделали.
источник

AM

Alexey Melnichuck in pro.lua
Так тут написано как раз наоборот - что больше нельзя утверждать что будет создана новая функция каждый раз

t={}; for i=1,10 do t[function().....end] = i end

Такой код приведет к неопределенному результату начиная с 5.2
источник

I

Igor725 in pro.lua
Ох, использовать функции как ключи для таблицы... Да такого даже мой больной разум ещё ни разу не додумывался😅
источник

AZ

Aydar Zarifullin in pro.lua
А я что написал? Просто поведение то именно неопределенное - реализация может создать новую функцию а может не создать, но полагаться на то что не создаст нельзя.
источник

DS

Daniil Smolyakov in pro.lua
Думаю, им просто было лень в этом месте писать про зависимость от замыкания)
источник

DS

Daniil Smolyakov in pro.lua
Ну изначально вопрос стоял не об использовании уникального указателя, а о том, как писать так, чтобы лишнего не плодить.
Ответ: начиная с 5.2 можно не париться о том как писать и выносить ли локальные функции))
источник

AM

Alexey Melnichuck in pro.lua

local s = 'hello'
for i=1,10 do t[i] = function()print(s)end

Как бы есть явное upvalue , но вроде и не важно.
источник

JC

Jesus Chrome in pro.lua
привет! недавно начал изучать lua, подскажите пожалуйста как из этой таблицы вывести возраст и имя студента с наивысшим performance
   ['Alex'] = { ['age'] = 18, ['perfomance'] = 3, ['course'] = 1        },
   ['David'] = {['age'] = 24, ['perfomance'] = 2, ['course'] = 5        },
   ['Ivan'] = { ['age'] = 20, ['perfomance'] = 5, ['course'] = 3        }

сделал так, но в конце выдает первый подошедший age :(
for key, value in pairs(students) do
   for key2, value2 in pairs(value) do
       if (key2 == 'perfomance') then
           perf = value2
       elseif(key2 == 'age') then
           age = value2
       end
   end
   if (perf >= max) then
       max = perf
       name = key
   end
end
источник

<

<blank> in pro.lua
Наверное потому что ты сохраняешь только max perf, хотя нужно сохранять вместе с ним maxAge
источник

JC

Jesus Chrome in pro.lua
понял, спасибо большое!!
источник

VG

Vladislav Grubov in pro.lua
Ты можешь получать значения из таблицы по ключу, просто по .

local perf = {}
for name, student in pairs(students) do
   if not perf.student or perf.student.perfomance < student.perfomance then
       perf.student = student
       perf.name = name
   end
end
return perf.name, perf.student.age
источник

JC

Jesus Chrome in pro.lua
спасибо за ответ! 🤝
источник
2021 September 23

S

Snusmumriken in pro.lua
Это нормальная практика. А ещё использовать таблицы и cdata как ключи, очень удобно:

function server:accept()
 local sock = self.sock:accept()
 while sock do
   self.clients[sock] = client:new(sock)
   sock = self.sock:accept()
 end
end

function server:update()
 for sock, client in pairs(self.clients) do
   ...
   if something_is_bad then
     client:close()
     self.clients[sock] = nil
   end
 end
end
источник

I

Igor725 in pro.lua
Ну таблицы и cdata и я использую, это реально полезно
источник

I

Igor725 in pro.lua
А вот зачем идентифицировать через функци, тут я применения найти не могу
источник

AM

Alexey Melnichuck in pro.lua
Множество уникальных действий например
источник