#lua #operator-overloading
#lua #перегрузка оператора
Вопрос:
Этот пример
debug.setmetatable(0,
{
__bnot = function(a) -- ~ operator
print("yay ".. a)
return a
end
})
print(~ (0))
print(~ (0.3))
print(~ (1))
print(~ (2))
print(~ (2.1))
Выводит следующее
-1
yay 0.3
0.3
-2
-3
yay 2.1
2.1
Я ожидал
yay 0
0
yay 0.3
0.3
yay 1
1
yay 2
2
yay 2.1
2.1
Похоже, что он не вызывается для целых значений.
Как переопределить оператор not для всех чисел?
Комментарии:
1. Согласно lua.org/manual/5.3/manual.html «Значения всех других типов имеют одну метатаблицу для каждого типа; то есть для всех чисел существует одна метатаблица» Итак, чего мне не хватает?
Ответ №1:
Согласно комментариям: Вы не можете переопределить все с помощью метода. Метаметоды являются резервными в Lua. Вы можете реализовать только операции, которые не были определены на языке Lua. Например, побитовые операции над числами, имеющими ненулевую дробную часть, не были определены.