Написание API, вызванного из Lua - на основе 0 или 1?

Если бы вы написали API, который вызывается из Lua (который основан на 1, например, индексы таблиц начинаются с 1), применили бы вы то же правило к своему API?

Например, предположим, что в вашем API есть функция GetFoo(x, y), которая возвращает Foo с координатой (x,y). Начали бы вы свои координатные оси с (0,0) или (1,1) для API, предполагая, что в самой системе (скажем, написанной на C или C++, которые основаны на 0) эти вещи начинаются с (0,0) (поэтому, если бы вы использовали соглашение Lua, вам всегда приходилось бы вычитать 1 при извлечении чисел для таких операций из стека lua).


person random    schedule 12.12.2010    source источник


Ответы (2)


Я не использовал Lua, но я бы сказал, что для системы координат (0,0) было бы предпочтительнее.

Для всего остального, если вы четко указываете это в документации, во что бы то ни стало начинайте индексы с 1.

person Peter Coulton    schedule 12.12.2010
comment
Согласен, для частного случая системы координат нет смысла начинать координаты с (1, 1). В частности, если вы собираетесь в конечном итоге расширить свою систему до плавающей запятой и/или отрицательных координат. - person Zecc; 12.12.2010

Вы также можете просто использовать индекс 0 в своей таблице/массивах. Единственное неудобство заключается в том, что стандартные библиотеки используют соглашение, основанное на 1. Таким образом, такие вещи, как table.sort, строковые операции и т. д., будут игнорировать элемент table[0].

person jpjacobs    schedule 12.12.2010