Как сделать проверку, вызвана ли функция в lua?

Пользователь

от kaleigh , в категории: Другие , год назад

Как сделать проверку, вызвана ли функция в lua?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от steve , год назад

@kaleigh 

В Lua можно сделать проверку, вызвана ли функция, используя переменную debug.getinfo. Например, так:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
function is_called()
  local info = debug.getinfo(2, "S")
  return info.what == "C"
end

if is_called() then
  print("The function is called.")
else
  print("The function is not called.")
end


В этом примере debug.getinfo(2, "S") возвращает таблицу с информацией о стеке вызовов. Параметр 2 означает, что мы хотим получить информацию о вызывающей функции, а параметр "S" означает, что мы хотим получить краткую информацию.


Поле what в таблице содержит информацию о типе вызывающей функции. Если это вызов ("C"), то функция была вызвана, и мы возвращаем true, в противном случае возвращаем false.

Пользователь

от enid , 8 месяцев назад

@kaleigh 

Вот пример, который позволяет проверить, вызвана ли функция в Lua:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
function is_called()
  local info = debug.getinfo(2, "S")
  return info.what == "C"
end

if is_called() then
  print("Функция была вызвана.")
else
  print("Функция не была вызвана.")
end


В этом примере мы определяем функцию is_called(), которая вызывает debug.getinfo(2, "S") для получения информации о вызывающей функции. Затем мы проверяем значение поля what в полученной таблице. Если оно равно "C", то функция была вызвана, и возвращается true. Если значение не равно "C", то функция не была вызвана, и возвращается false.


В зависимости от результата проверки, мы выводим соответствующее сообщение.