04.06.2012, 15:34
В документации написано:
Only the following operators may be redefined: +, -, *, /, %, ++, --, ==, !=, <, >, <=, >=, ! and =.
+= и -= нет, значит их нельзя правильно подогнать под Float, даже в последней версии.
Почему работает +? Потому что там используется функция floatadd
float.inc
А т.к. мы не можем редефайнить += и -=, значит они работают как с целыми числами.
Вывод: 5
Вывод: 1084227584 (и tag mismatch при компиляции, убрать: _:b)
А если выводить так
То вывод: 4 (наверное вызвался floatadd, т.к. есть Float значение и преобразовал a в Float )
В общем полный каламбур и неразбериха, лучше использовать языки с нормальной типизацией...
Only the following operators may be redefined: +, -, *, /, %, ++, --, ==, !=, <, >, <=, >=, ! and =.
+= и -= нет, значит их нельзя правильно подогнать под Float, даже в последней версии.
Почему работает +? Потому что там используется функция floatadd
float.inc
pawn Код:
stock Float:operator+(Float:oper1, oper2)
return floatadd(oper1, float(oper2));
pawn Код:
new a = 1,
Float:b = 4;
a += b;
printf("%d", a);
pawn Код:
new a = 1,
Float:b = 4;
a = a + b;
printf("%d", a);
А если выводить так
pawn Код:
printf("%f", a);
В общем полный каламбур и неразбериха, лучше использовать языки с нормальной типизацией...