LINUX.ORG.RU

История изменений

Исправление Egor_, (текущая версия) :

~= вместо != (ну нахера?!);

мысля у автора была что ~ это NOT, поэтому ~= это не равно
в луа 5.3 добавился оператор ~ побитовый NOT
как видишь, всё логично

индексы с 1 (бог им судья);

где-то видел упоминание одного забавного холивара «паскаль против си»
сторонник си перечислил недостатки паскаля, составив список типа такого:

  1. индексы символов в строках начинаются с 1, а не с 0
  2. ещё что-то
  3. ещё что-то

ему в ответ сторонник паскаля сказал, а почему ты считаешь паскалевскую нумерацию индексов с 1 недостатком, если сам составил список, занумерованный с единицы вопреки якобы более удобной нумерации с нуля?
сишник не нашёл что ответить )))

в луа индексы начинаются с единицы, потому что во всех стандартных функциях в луа, где принимаются индексы, индексы можно считать как вперёд с начала (1,2,3), так и назад с конца (-1,-2,-3). Если бы индексы начинались с нуля, то фича не получилась бы такая красивая и симметричная.

единственная структура, которая у нормальных людей называется Map, здесь почему-то называется таблицей;

таблица в луа - это одновременно и map, и array, и struct.
я б назвал такую структуру данных «монстроконтейнер», но автор луа выбрал более банальное и неудачное имя.

хорошо или плохо что 0 приводится к true – вопрос философский, в целом удобно, но точно необщепринято;

ну, в сишечке 0 приводится в false потому что язык со строгой типизацией, и там переменная типа int может хранить только числа и не может хранить null/undefined.
а в луа можно хранить в любой переменной nil (значение, выражающее факт отсутствия значения), поэтому 0 - это присутствующее значение, поэтому true.

nil – с одной стороны вроде бы и хорош, с другой – используется как маркер конца массива даже если после него есть значения; в т.ч. массива параметров arg, что дико неудобно. Вот что мешало поле length из коробки сделать?

ты ж сам только что сказал, что в луа таблица - это map
какой нахрен length у map?
length бывает только у массивов
nil - это отсутствие значения, так откуда nil возьмётся в массиве, например, чисел?
ты хочешь чего-то очень странного (массив чисел с дырами)?
у сишников такого типа данных нет, и ничего, живут как-то
но в луа это можно сделать: хочешь хранить длину - храни в поле .n, не хочешь хранить длину - не храни, выбор за тобой, ничего «из коробки» здесь не нужно
если ты передаёшь аргументы в функцию, включая nil, и хочешь узнать их количество, то для этого есть select(‘#’,…)

нет оператора continue; здравствуй куча вложенных if-ов.

continue можно сделать через break на промежуточный фиктивный однократно-выполняемый цикл:

for ... do -- твой цикл
  repeat
    ....
    break  -- это твой continue
    ....
    break  -- это твой continue
    ....
  until true
end

битовые операции завезли только в 5.3 (бакпортнули либой в 5.2); не смотрел, но видимо как и в js они должны быть на младших 32 битах, т.к. в lua все числа – double

в 5.3 завезли int64, и битовые операции - 64-битные
в 5.2 числа только double, и поэтому битовые операции 32-битные

вместо x?y:z есть x and y or z, причём здесь nil от false неотличимы, т.е. эквивалент x?nil:z тут не написать (можно впрочем написать эквивалент not x ? z : nil). Некритично, но эдакое напоминание – «не забывай на чём пишешь»

не ленись, пиши через if - производительность будет точно такая же

«Could be an int, a string, a list», an object, a class, a method…

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

Разве что if уже две недели на автомате закрываю fi вместо end, #$%ный баш.

у меня проблема с if-ами при переключении между паскалем и луа
никак не привыкну, что там if-end, а там if-begin-end

Исходная версия Egor_, :

~= вместо != (ну нахера?!);

мысля у автора была что ~ это NOT, поэтому ~= это не равно
в луа 5.3 добавился оператор ~ побитовый NOT
как видишь, всё логично

индексы с 1 (бог им судья);

где-то видел упоминание одного забавного холивара «паскаль против си»
сторонник си перечислил недостатки паскаля, составив список типа такого:

  1. индексы символов в строках начинаются с 1, а не с 0
  2. ещё что-то
  3. ещё что-то

Разве что if уже две недели на автомате закрываю fi вместо end, #$%ный баш.

у меня проблема с if-ами при переключении между паскалем и луа
никак не привыкну, что там if-end, а там if-begin-end ему в ответ сторонник паскаля сказал, а почему ты считаешь паскалевскую нумерацию индексов с 1 недостатком, если сам составил список, занумерованный с единицы вопреки якобы более удобной нумерации с нуля?
сишник не нашёл что ответить )))

в луа индексы начинаются с единицы, потому что во всех стандартных функциях в луа, где принимаются индексы, индексы можно считать как вперёд с начала (1,2,3), так и назад с конца (-1,-2,-3). Если бы индексы начинались с нуля, то фича не получилась бы такая красивая и симметричная.

единственная структура, которая у нормальных людей называется Map, здесь почему-то называется таблицей;

таблица в луа - это одновременно и map, и array, и struct.
я б назвал такую структуру данных «монстроконтейнер», но автор луа выбрал более банальное и неудачное имя.

хорошо или плохо что 0 приводится к true – вопрос философский, в целом удобно, но точно необщепринято;

ну, в сишечке 0 приводится в false потому что язык со строгой типизацией, и там переменная типа int может хранить только числа и не может хранить null/undefined.
а в луа можно хранить в любой переменной nil (значение, выражающее факт отсутствия значения), поэтому 0 - это присутствующее значение, поэтому true.

nil – с одной стороны вроде бы и хорош, с другой – используется как маркер конца массива даже если после него есть значения; в т.ч. массива параметров arg, что дико неудобно. Вот что мешало поле length из коробки сделать?

ты ж сам только что сказал, что в луа таблица - это map
какой нахрен length у map?
length бывает только у массивов
nil - это отсутствие значения, так откуда nil возьмётся в массиве, например, чисел?
ты хочешь чего-то очень странного (массив чисел с дырами)?
у сишников такого типа данных нет, и ничего, живут как-то
но в луа это можно сделать: хочешь хранить длину - храни в поле .n, не хочешь хранить длину - не храни, выбор за тобой, ничего «из коробки» здесь не нужно
если ты передаёшь аргументы в функцию, включая nil, и хочешь узнать их количество, то для этого есть select(‘#’,…)

нет оператора continue; здравствуй куча вложенных if-ов.

continue можно сделать через break на промежуточный фиктивный однократно-выполняемый цикл:

for ... do -- твой цикл
  repeat
    ....
    break  -- это твой continue
    ....
    break  -- это твой continue
    ....
  until true
end

битовые операции завезли только в 5.3 (бакпортнули либой в 5.2); не смотрел, но видимо как и в js они должны быть на младших 32 битах, т.к. в lua все числа – double

в 5.3 завезли int64, и битовые операции - 64-битные
в 5.2 числа только double, и поэтому битовые операции 32-битные

вместо x?y:z есть x and y or z, причём здесь nil от false неотличимы, т.е. эквивалент x?nil:z тут не написать (можно впрочем написать эквивалент not x ? z : nil). Некритично, но эдакое напоминание – «не забывай на чём пишешь»

не ленись, пиши через if - производительность будет точно такая же

«Could be an int, a string, a list», an object, a class, a method…

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