Функции в Lua - PullRequest
       27

Функции в Lua

3 голосов
/ 15 ноября 2011

Я начинаю изучать Lua из программирования на Lua (2-е издание). Я не понял следующего в книге.

network = {
          {name ="grauna", IP="210.26.30.34"},
          {name ="araial", IP="210.26.30.23"},
}

Если мы хотим отсортировать таблицу по имени поля, автор упоминает

table.sort(network, function (a,b) return (a.name > b.name) end }

Что здесь происходит? Что обозначает функция (a, b)? Является ли функция ключевым словом или чем-то еще.

Если поиграть с ним и создать порядок стола

 order={x=1,x=22,x=10} // not sure this is legal

а затем сделал

 print (table.sort(order,function(a,b) return (a.x > b.x) end))

Я не получил никакого вывода. Куда я иду не так?

Спасибо

Ответы [ 4 ]

8 голосов
/ 15 ноября 2011

Это анонимная функция , которая принимает два аргумента и возвращает true, если первый аргумент меньше второго аргумента.table.sort() запускает эту функцию для каждого из элементов, требующих сортировки, и сравнивает каждый элемент с предыдущим элементом.

3 голосов
/ 15 ноября 2011

Чтобы ответить на вторую часть вашего вопроса: Lua очень маленькая и не дает возможности напечатать таблицу напрямую. Если вы используете таблицу в качестве списка или массива, вы можете сделать это:

print(unpack(some_table))

unpack({1, 2, 3}) возвращает 1, 2, 3. Очень полезная функция.

3 голосов
/ 15 ноября 2011

Я думаю (но я не уверен), что order={x=1,x=22,x=10} имеет то же значение в Lua , что и order={x=10}, таблица с one key "x", связанной сзначение 10.Возможно, вы имели в виду {{x=1},{x=22},{x=10}}, чтобы создать «массив» из 3 компонентов, каждый из которых имеет ключ "x".

2 голосов
/ 15 ноября 2011

function в lua - это ключевое слово, похожее на lambda в Scheme или Common Lisp (и также Python) или fun в Ocaml, чтобы вводить анонимные функции с закрытыми переменными, то есть замыкания

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...