Вопрос примитивный, но все же. Что такого революционного вносит Lua в скриптинг, чего просто невозможно было достичь без него. Из того, что я заметил, анонимные методы, нативные списки и полиморфизм выглядят очень круто. Есть ли что-то еще?

Кложуры и передача данных с их помощью в нативные каллбеки от форгрупа и таймеров через анонимные функции.
Динамическая природа языка, позволяющая в любой момент времени заменить любую функцию чем-то другим. Хороший пример - оборачиваем вызов RemoveUnit своей оберткой и делаем какие-то действия перед тем как вызвать настоящий RemoveUnit.
Своеобразное но рабочее ООП.
Таблицы которые одновременно и массив и хештаблица и ассоциативный массив и при этом очень быстро работают.
Передача и хранение функций в параметрах и переменных.
Передача массивов в параметрах.
Метатаблицы и метаметоды, позволяющие переопределять поведение таблиц в разных ситуациях - добавление и получение элементов, различные операторы, вся эта фигня. Пример - можно запилить "класс" вектор и пользоваться векторной математикой без костылей, переопределив для векторов операторы сложения, вычитания, умножения и так далее.

Вобще, давно пора завести статью на эту тему и собирать там все мелкие и большие фишечки и возможности Lua в сравнении с JASS.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
30
Я имею в виду что-то вроде Action в шарпе
В шарпе статическая типизация и посему там нужен этот тип. А в lua всё является объектами, которые можно свободно переопределять и возвращать:
local function sum(a)
    return function(b)
        return a+b
    end
end
print(sum(2)(3)) --> 5
sum = 'new value'
print(sum) --> new value
а статей еще не предвидится
Предвидятся))
30
в шарпе тоже можно переопределять)
Не знаком с шарпом, но врятли он позволит из строки сделать функцию
7
NazarPunk, да, из строки никак, конечно.
Всем спасибо, убедили, что все хорошо.
28
Настоящий полиморфизм не существовал на c\vJASS
А он и не мог, ведь c\vJass конвертируются в JASS2, у которого нет даже ООП.
Но в vJass есть эмуляция полиморфизма через массивы и триггеры.
Например, то, что мы не можем использовать экземпляр структуры B в структуре A, т.к. та объявлена ниже, и интерпретатор еще не знает о ее существовании.
Тоже есть в vJass.
Extremator:
Так есть же тип code
А как ты адекватно вызовешь такую функцию и передашь аргументы?
В vJass есть hook, который можно назвать переопределением, что не затрагивает blizzard.j.

Прощай vJass, ты был мне другом, хоть и багованным)
15
А он и не мог, ведь c\vJass конвертируются в JASS2, у которого нет даже ООП.
Pascal и C++ конвертируются в набор процессорных команд, где тоже нет никакого ООП. Выходит в этих языках не может существовать полиморфизма?
28
Pascal и C++ конвертируются в набор процессорных команд, где тоже нет никакого ООП. Выходит в этих языках не может существовать полиморфизма?
Одно дело, когда из ЯП в ассемблер, другое, когда из препроцессора в недоЯП. Ведь речь шла про "настоящий" полиморфизм, то есть из коробки ЯП, а не из его препроцессора.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.