Безопасно ли использовать «тип» в качестве имени/идентификатора в Lua?

Хорошо, в соответствии с PiL 2.1 — Лексические соглашения это должно быть возможно, поскольку оно не указано в качестве зарезервированного ключевого слова, но оно действительно используется для возврата типа элементов, подобного этому типу («независимо»), и VS Code иногда окрашивает его, а иногда не зависит в контексте... Кроме того, если я делаю что-то подобное local type = "123" print(type), кажется, что в ZeroBrane Studio без проблем печатается "123", но в программе хостинга, для которой я использую скрипт (оба одинаково работают на Lua 5.2), по какой-то причине он выдает следующее ошибка после печати: «попытка вызвать upvalue 'type' (строковое значение)».

Итак, мое замешательство, безопасно ли его использовать, поскольку оно не указано как зарезервированное ключевое слово или нет? А если нет, то почему там не указано? Я всегда старался избегать этого в пользу, например, «доброго» на всякий случай, но теперь я хочу быть уверенным в том, что здесь происходит (если что-то 🙄), и я надеюсь, что это имеет смысл... Спасибо.

Я проверил ваш код на Lua 5.2, и он отлично работает. Какую программу хостинга вы используете?

Luke100000 19.04.2023 07:59

Покажите свой код, где вы используете type в качестве повышающего значения, и попробуйте вызвать его. Скорее всего, где-то в коде есть type(...), потому что кто-то ожидает, что type будет встроенной функцией.

Luatic 19.04.2023 08:19

@Luke100000 Это Мохо, но я не думаю, что это имеет значение, поскольку он не использует ничего, называемого просто «типом», во всем своем интерфейсе сценариев. Я еще не совсем уверен, но я думаю, что все может иметь больше общего с тем, что говорит Луатик.

Rai 19.04.2023 15:44

@Luatic Итак, проблема здесь в том, что «тип» может быть просто не тем объектом, о котором я думал? Я имею в виду, поскольку его можно использовать в чистом Lua для выполнения действия (возврат типа аргумента), я предположил, что он должен восприниматься языком как зарезервированное ключевое слово, как и в других случаях, но кажется, что тип по какой-то причине просто другой. , не так ли? И выдаст ли он ошибку или нет, будет зависеть от того, попытаетесь ли вы использовать его как обычно после присвоения значения... Пожалуйста, поправьте меня, если я ошибаюсь. Но, в любом случае, где такие объекты перечислены в руководстве, чтобы о них можно было заботиться? Спасибо.

Rai 19.04.2023 15:59

Эти «объекты» — просто функции в глобальной среде. Они перечислены в справочнике. Ни один разумный язык не определяет все свои стандартные библиотечные функции как ключевые слова на синтаксическом уровне.

Luatic 19.04.2023 16:05

@Luatic OK; Кажется, я понял... Так что ЗДЕСЬ можно получить список глобальных функций. Ну, я должен был это знать, и вроде бы я знал, но я запутался с этим словом «тип» из-за того, что оно было таким распространенным словом, которое можно было бы использовать в качестве имени переменной или чего-то еще, и я принял это как особый случай или что-то в этом роде. , Но спасибо, что сообщили мне, что это точно так же, как и любой другой!

Rai 19.04.2023 16:08

@Luatic Да (извините, перекрестный комментарий), я думаю, что понял теперь, как я уже сказал, моя ошибка заключалась в том, чтобы думать об этом как о другом виде «объекта», я не знаю (сейчас), почему 🙄. Конечно, все имеет смысл, как есть (сейчас).

Rai 19.04.2023 16:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы только затеняете переменную, это безопасно. Однако я не рекомендую скрывать глобальные переменные. Он подвержен ошибкам (например, вы забыли объявить локальный и внезапно перезаписали тип), и у вас, очевидно, больше нет доступа к этим глобальным переменным. Некоторые IDE также выделяют встроенные функции, что не является проблемой, но отвлекает.

Спасибо за ответ. Теперь я вижу свою ошибку, предполагая, что "тип" является объектом другого типа, чем он есть на самом деле, ну, просто еще одна глобальная функция, как и любая другая... Но теперь я точно знаю, почему я хотел бы избежать использования любого из слова вдоль кода (даже если это возможно, как вы указываете), а не просто избегать его просто для интуиции... Приветствую.

Rai 19.04.2023 16:20

Другие вопросы по теме