Странный результат взаимоlействия gsub и tonumber Topic is solved

Здесь можно сообщить о найденных багах в Far.
Post Reply
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Странный результат взаимоlействия gsub и tonumber

Post by buniak_a_h »

Наткнулся на странную странность.
Как воспроизвести:
в комстроке наберите
lua:=('3 024 pixels'):gsub('%D','')=='3024',tonumber('3024'),tonumber(('3 024 pixels'):gsub('%D',''))
Получите:
╔════════════════╗ ║ 1│ true ║ ║ 3│ 3024 ║ ║ 2│ 1556 ║ ╚═ 3 arguments ══╝
Т.е.:
  1. gsub возвращает правильную строку (3024)
  2. tonumber('3024') возвращает 3024 - правильно
  3. А вот результат выполнения gsub (который на самом деле - "3024") преобразовывается в число странно (возвращает 1556)
Это я что-то делаю не так, или глюк в lua? и если моя ошибка, то в чём и как исправить?
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Странный результат взаимоlействия gsub и tonumber

Post by Shmuel »

buniak_a_h wrote: Fri 07 Oct, 2022 10:07 если моя ошибка, то в чём и как исправить?
gsub возвращает 2 значения, а tonumber принимает 2 значения.
Исправить можно либо с помощью вспомогательной переменной, либо взяв весь вызов gsub в скобки.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Странный результат взаимоlействия gsub и tonumber

Post by Shmuel »

Третий вариант исправления: - указать явно 2-й параметр для tonumber (в данном случае либо nil, либо 10).
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Странный результат взаимоlействия gsub и tonumber

Post by buniak_a_h »

Shmuel, скобки вполне устраивают :-) Большущее спасибо! Сам ни за что бы не допетрил!
Post Reply

Return to “Глюки и баги”