Я получаю ужасно путаницу с помощью двоеточия, используемого при определении/вызове функций Lua.Lua: обозначение двоеточия, определение «я» и функции по сравнению с вызовом
Я думал, что я получил мою голову вокруг него, пока я не увидел этот кусок кода:
function string.PatternSafe(str)
return (str:gsub(".", pattern_escape_replacements));
end
function string.Trim(s, char)
if char then char = char:PatternSafe() else char = "%s" end
return string.match(s, "^" .. char .. "*(.-)" .. char .. "*$") or s
end
Что толку меня здесь является то, что string.PatternSafe() не ссылается на «себя» в любом месте, но код, похоже, работает.
Я также видел несколько сценариев, которые используют обозначения двоеточие при определении функции, например:
function foo:bar(param1) ... end
После нескольких часов прибегая к помощи я до сих пор не удалось выяснить, что именно происходит в этих два контекста. Мои текущие предположения заключаются в следующем:
- Если функция определяется с помощью обозначения толстой кишки, он получает невидимый параметр «я», вставленный в качестве первого параметра
- Если функция вызывается с использованием обозначений толстой кишки, объект, предшествующий ' : 'вставляется в аргументы (поэтому становится первым параметром функции)
- Если функция вызывается с использованием точечной нотации, то даже если она была определена с использованием двоеточия, она не получит объект, вставленный в качестве первого аргумента/параметр
Если мое предположение Правильно, что вызывает дополнительный вопрос: что является лучшим способом обеспечить правильную работу функции?
Возможный дубликат [Разница между. и: в Lua] (https://stackoverflow.com/questions/4911186/difference-between-and-in-lua) –