2012-01-01 2 views
4

Есть ли у Lua встроенная функция sum()? Кажется, я не могу найти его, и я почти повсюду смотрел документацию. Возможно, table.sum(), или что-то вроде того, чтобы следовать текущим соглашениям. Но так как я не мог найти его, я должен был реализовать:Как суммировать таблицу чисел в Lua?

function sum(t) 
    local sum = 0 
    for k,v in pairs(t) do 
     sum = sum + v 
    end 

    return sum 
end 

кажется смешно, чтобы осуществить что-то это просто, хотя. Существует ли встроенная функция или нет?

ответ

10

Я не согласен, было бы излишним иметь что-то примитивное и конкретное, как table.sum в стандартной библиотеке.

Было бы более полезным для реализации table.reduce вдоль линий:

table.reduce = function (list, fn) 
    local acc 
    for k, v in ipairs(list) do 
     if 1 == k then 
      acc = v 
     else 
      acc = fn(acc, v) 
     end 
    end 
    return acc 
end 

И использовать его с простой лямбда:

table.reduce(
    {1, 2, 3}, 
    function (a, b) 
     return a + b 
    end 
) 

Пример реализации reduce не хватает проверки типов, но вы должны получить эту идею.

+1

ОТЛИЧНО !! также, спасибо за идею Lambda – Sean

+0

Я не согласен, что обычно используется как 'sum', должно быть в std-lib. Написание lambdas стареет быстро - речь идет не о сложности композиции, а о читаемости кода. Читая сотни тысяч строк кода, я бы скорее прочитал 'my_table.sum', чем ваш раздутый blob. – user3467349

+1

Дело в том, что 'сокращение' является общим и полезным для многих приложений. Немного подробностей в конкретных случаях - это нормально, если вы хотите, чтобы стандартная библиотека была минимальной, как в Lua. – katspaugh