2017-01-19 4 views
2

Чтобы определить, является ли переменная функция, я использую следующий методБыстрый способ определить, является ли переменная функцией?

function isFunction(variable) 
    return type(variable) == "function" 
end 

Насколько мне известно, это сравнение строк. Как я понял, строки сравнения относительно медленно и я боюсь, что эта функция может быть узким местом в моем коде. Существует ли менее дорогостоящий способ определить, является ли переменная функцией?

Я надеюсь, что есть функция, которая возвращает целое число, которое указывает тип переменной. Или я могу задать свой вопрос другим способом: как type(var) определяет тип переменной? Разумеется, каждая переменная не может содержать строку, представляющую ее тип, поэтому я предполагаю, что в lua есть некоторые backend-вещи, которые просматривают строку "function" при вызове type(var).

+0

не уверен, что вы должны думать о своем программном обеспечении, если вам нужно часто проверять переменные на то, чтобы быть функцией, которая является значительным узким местом ... – Piglet

+0

Честно говоря, не совсем тот ответ, который я искал, но вы правильно. Это заставило меня задуматься, и мне, вероятно, не понадобится быстрый способ проверить типы в любом случае. Ради вопроса, как насчет того, чтобы мы притворились, что я прошу проверить, вместо этого это строка ;-) – gromit190

+0

Aside; «variable» должна быть «value». Переменные не имеют типов; только значения do.Values ​​производятся выражениями, которые, конечно, могут быть такими же простыми, как переменная. –

ответ

8

Сравнение строк в Lua очень быстро, потому что большинство строк интернированы.

Внутренне каждое значение Lua содержит тег, идентифицирующий его тип. Именно этот тег использует type.

Смежные вопросы