💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 55 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 6 из 20
Что нужно знать о Lua, прежде чем предсказывать результат этого кода? Нужна именно центральная гарантия раздела «Отсутствующее значение nil».
Lua Lua · Отсутствующее значение nil · разбор 1 Копировать
local t = {mode = "fast", retries = 2}
t.mode = nil
print(t.mode, rawget(t, "mode"), next(t) ~= nil)
Наблюдаемый результат в разделе «Отсутствующее значение nil» опирается на правило: В Lua тип принадлежит значению, а не переменной: одно имя может по очереди хранить число, строку или таблицу; операции проверяют текущие значения во время выполнения.
Наблюдаемый результат в разделе «Отсутствующее значение nil» опирается на правило: В Lua тип принадлежит значению, а не переменной: одно имя может по очереди хранить число, строку или таблицу.
Наблюдаемый результат в разделе «Отсутствующее значение nil» опирается на правило: Неявные преобразования в Lua ограничены и зависят от версии: tonumber и tostring выражают намерение яснее, чем расчёт на автоматическое смешивание строк и чисел.
Наблюдаемый результат в разделе «Отсутствующее значение nil» опирается на правило: nil обозначает отсутствие значения; присваивание nil удаляет ключ из таблицы, а обращение к отсутствующему ключу возвращает nil, не создавая запись.
Наблюдаемый результат в разделе «Отсутствующее значение nil» опирается на правило: local ограничивает имя лексическим блоком и обычно предпочтительнее глобального присваивания; объявление local становится видимым только после своей инициализирующей части.
Вопрос 8 из 20
Какой инвариант нельзя потерять при упрощении этого фрагмента? Выберите гарантию, определяющую раздел «Отсутствующее значение nil».
Lua Lua · Отсутствующее значение nil · разбор 3 Копировать
do
local t = {mode = "fast", retries = 2}
t.mode = nil
print(t.mode, rawget(t, "mode"), next(t) ~= nil)
end
Регрессионный контракт раздела «Отсутствующее значение nil» требует: В Lua тип принадлежит значению, а не переменной: одно имя может по очереди хранить число, строку или таблицу.
Регрессионный контракт раздела «Отсутствующее значение nil» требует: В Lua тип принадлежит значению, а не переменной: одно имя может по очереди хранить число, строку или таблицу; операции проверяют текущие значения во время выполнения.
Регрессионный контракт раздела «Отсутствующее значение nil» требует: local ограничивает имя лексическим блоком и обычно предпочтительнее глобального присваивания; объявление local становится видимым только после своей инициализирующей части.
Регрессионный контракт раздела «Отсутствующее значение nil» требует: nil обозначает отсутствие значения; присваивание nil удаляет ключ из таблицы, а обращение к отсутствующему ключу возвращает nil, не создавая запись.
Регрессионный контракт раздела «Отсутствующее значение nil» требует: Неявные преобразования в Lua ограничены и зависят от версии: tonumber и tostring выражают намерение яснее, чем расчёт на автоматическое смешивание строк и чисел.
Вопрос 17 из 20
Какой крайний случай важнее всего добавить к проверке? Ищется граничное следствие правила из раздела «Преобразования».
Lua Lua · Преобразования · разбор 2 Копировать
local function reproduce_case()
local raw = "08"
local n = tonumber(raw)
print(n and n + 2, tostring(n))
end
reproduce_case()
Второй запуск раздела «Преобразования» нужен, чтобы увидеть: В Lua тип принадлежит значению, а не переменной: одно имя может по очереди хранить число, строку или таблицу; операции проверяют текущие значения во время выполнения.
Второй запуск раздела «Преобразования» нужен, чтобы увидеть: local ограничивает имя лексическим блоком и обычно предпочтительнее глобального присваивания; объявление local становится видимым только после своей инициализирующей части.
Второй запуск раздела «Преобразования» нужен, чтобы увидеть: Неявные преобразования в Lua ограничены и зависят от версии: tonumber и tostring выражают намерение яснее, чем расчёт на автоматическое смешивание строк и чисел.
Второй запуск раздела «Преобразования» нужен, чтобы увидеть: Присваивание nil удаляет ключ из таблицы, а обращение к отсутствующему ключу возвращает nil, не создавая запись.
Второй запуск раздела «Преобразования» нужен, чтобы увидеть: nil обозначает отсутствие значения; присваивание nil удаляет ключ из таблицы, а обращение к отсутствующему ключу возвращает nil, не создавая запись.