Луа проверяет несколько значений на равенство

Мне нравится делать игры в Roblox, а я пишу в lua. Хорошо программируя игры, я спрашиваю себя, равно ли значение другому значению много, и оно может создавать действительно длинные строки кода и может быть довольно повторяющимся.

Например:

если x.ClassName == 'Рубашка' или
x.ClassName == 'Аксессуар' или
x.ClassName == 'Штаны' или
x.ClassName == 'CharacterMesh' тогда
- делать вещи
конец

делать это не только может быть очень грязно, но и просто просить одно и то же снова и снова, слегка изменяя.
Мне было интересно, есть ли способ в lua спросить, равно ли значение нескольких различных значений

Например:

если x.ClassName == ("Рубашка" или "Аксессуар" или "Штаны" или "Персонаж"), то
- делать вещи
конец

2 ответа

Решение

В Lua нет собственного способа сделать это, но вы можете реализовать вспомогательную функцию set чтобы достичь этого.

function set(...)
   local ret = {}
   for _,k in ipairs({...}) do ret[k] = true end
   return ret
end

local classname = 'Shirt'
if set('Shirt', 'Accessory', 'Pants', 'CharacterMesh')[classname] then
   print('true')    
end

Вы могли бы сделать что-то вроде этого:

if string.match('/Shirt/Accessory/Pants/CharacterMesh/', '/'..x.ClassName..'/') then ... end 

но вряд ли это будет быстрее, чем если бы у вас была цепочка if.

Другие вопросы по тегам