💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 55 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 11 из 20
Какое правило точнее всего описывает происходящее в строке «local Player=setmetatable({}, {__index=Entity}); Player.__index=Player»? Выберите основное правило раздела «Наследование».
Lua Lua · Наследование · разбор 1 Копировать
local Entity={}; Entity.__index=Entity
function Entity:kind() return "entity" end
local Player=setmetatable({}, {__index=Entity}); Player.__index=Player
function Player:kind() return "player" end
local p=setmetatable({},Player)
print(p:kind())
Для этого кода в разделе «Наследование» нужно учитывать: Конструктор на Lua — обычная функция, которая создаёт таблицу, устанавливает метатаблицу и проверяет инварианты.
Для этого кода в разделе «Наследование» нужно учитывать: Инкапсуляцию обеспечивают модули, замыкания и ограниченный интерфейс, а не имя поля с подчёркиванием; любой код с ссылкой на таблицу может читать её открытые ключи.
Для этого кода в разделе «Наследование» нужно учитывать: Прототипное поведение обычно строят через __index на таблицу методов; экземпляр хранит собственные данные, а отсутствующие методы ищутся в прототипе.
Для этого кода в разделе «Наследование» нужно учитывать: Конструктор на Lua — обычная функция, которая создаёт таблицу, устанавливает метатаблицу и проверяет инварианты; двоеточие лишь передаёт self и не создаёт объект автоматически.
Для этого кода в разделе «Наследование» нужно учитывать: Наследование через цепочку __index возможно, но длинные и изменяемые цепочки усложняют поиск методов; композиция часто яснее для независимых возможностей.
Вопрос 12 из 20
Какой крайний случай важнее всего добавить к проверке? Ищется граничное следствие правила из раздела «Наследование».
Lua Lua · Наследование · разбор 2 Копировать
local function reproduce_case()
local Entity={}; Entity.__index=Entity
function Entity:kind() return "entity" end
local Player=setmetatable({}, {__index=Entity}); Player.__index=Player
function Player:kind() return "player" end
local p=setmetatable({},Player)
print(p:kind())
end
reproduce_case()
Регрессионная проверка раздела «Наследование» наблюдает следующее: Конструктор на Lua — обычная функция, которая создаёт таблицу, устанавливает метатаблицу и проверяет инварианты.
Регрессионная проверка раздела «Наследование» наблюдает следующее: Инкапсуляцию обеспечивают модули, замыкания и ограниченный интерфейс, а не имя поля с подчёркиванием; любой код с ссылкой на таблицу может читать её открытые ключи.
Регрессионная проверка раздела «Наследование» наблюдает следующее: Наследование через цепочку __index возможно, но длинные и изменяемые цепочки усложняют поиск методов; композиция часто яснее для независимых возможностей.
Регрессионная проверка раздела «Наследование» наблюдает следующее: Прототипное поведение обычно строят через __index на таблицу методов; экземпляр хранит собственные данные, а отсутствующие методы ищутся в прототипе.
Регрессионная проверка раздела «Наследование» наблюдает следующее: Конструктор на Lua — обычная функция, которая создаёт таблицу, устанавливает метатаблицу и проверяет инварианты; двоеточие лишь передаёт self и не создаёт объект автоматически.