Sorry to all, it's was really stupid error, in lua then you typing for example 3/2 result will 1.5 and I knew about it (it's common thing for languages with dynamic typing), but if you write string.rep("some string", 1.5) result will "some stringsome string" as you see it's repeated twice! Cause in lua float to integer working like int new_value = int(value + 0.5f) (in c/c++). You can fix your scripts easy, if you see this string in your scripts:
function s(n)return("r1"):rep(n/32)..("r32"):rep(n%32)end
or this string:
function s(n)return("r1"):rep(n/16)..("r16"):rep(n%16)end
change it to:
function s(n)return("r1"):rep(math.floor(n/32))..("r32"):rep(n%32)end
and respectively to:
function s(n)return("r1"):rep(math.floor(n/16))..("r16"):rep(n%16)end
NotesConvertor is going to be updated with that fix later.
Извиняюсь перед всеми кто пользуется NotesConvertor, нашел действительно идиотскую ошибку, в lua когда вы пишите например что-нибудь вроде такого: 3/2 результатом будет 1.5 и тут ничего удивительного для языка с динамической типизацией, но если написать string.rep("какая-то строка", 1.5) то в результате мы получим "какая-то строкакакая-то строка", как не трудно заметить "какая-то строка" повторилась дважды! Объясняется это тем что в lua числа с плавающей точкой преобразуются в целочисленные подобным образом int new_value = int(value + 0.5f) (на языке c/c++). На данный момент вы можете исправить свои скрипты довольно легко, если вы видите в коде скрипта подобную строку:
function s(n)return("r1"):rep(n/32)..("r32"):rep(n%32)end
или такую строку:
function s(n)return("r1"):rep(n/16)..("r16"):rep(n%16)end
то замените ее на:
function s(n)return("r1"):rep(math.floor(n/32))..("r32"):rep(n%32)end
и соответственно на:
function s(n)return("r1"):rep(math.floor(n/16))..("r16"):rep(n%16)end
NotesConvertor будет обновлен с учетом данного исправления чуть позже.
No comments:
Post a Comment