У меня есть линия
distanceTable[ tonumber(distance) ] = obj
Это вызывает ошибку "индекс таблицы равен нан". Когда расстояние составляет 67,882250993909. type (distance) возвращает "число"
Расстояние - это число, поэтому почему я получаю эту ошибку?
Почему вы используете tonumber(distance)
? Разве distance
уже не номер? Если distance
- это строка, то type(distance)
не может быть number
.
номер (расстояние) использовался для демонстрационных целей
Это странно, потому что я не припомню, чтобы когда-либо получал nan
в результате tonumber
, только номер не-nan
или nil
. Интересно, что случилось.
@cyclaminist, tonumber(0/0)
дает nan
.
@lhf, думаю, я думал о случаях, когда tonumber
получает нечисловой. Я не нашел строки, которую tonumber
преобразует в nan
(например, tonumber 'nan'
возвращает nil
).
Как говорится в сообщении об ошибке, NaN не может быть ключом в таблице, как и nil
. Я полагаю, что это ограничение вызвано тем фактом, что существует много возможных двоичных значений для NaN, и в соответствии со стандартом IEEE, NaN != NaN
.
Поскольку tonumber
не может возвращать NaN при заданной строке, он должен быть получен из distance
. Один из результатов использованных вами операций, вероятно, был undefined, поэтому он вернул NaN. Вы можете использовать distance ~= distance
для проверки NaN и соответствующей обработки или предотвращения вычислений, которые привели к значению.
tonumber
возвращает NaN, если задано NaN, как, например, в tonumber(0/0)
.
nan
- это число; например,0/0
возвращаетnan
, аtype(0/0)
- это"number"
. Не могли бы вы дать больше кода, чтобы показать, где это происходит и каково значениеdistance
при возникновении ошибки?