💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 70 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 1 из 25
Какое утверждение объясняет результат без скрытых допущений? Выберите основное правило раздела «Создание».
Lua Lua · Создание · разбор 1 Копировать
local co = coroutine.create(function(a,b) return a+b end)
print(coroutine.status(co))
local ok, value = coroutine.resume(co, 2, 5)
print(ok, value, coroutine.status(co))
Для фрагмента из раздела «Создание» верно: Первый resume передаёт аргументы функции корутины, последующие — результату yield, а окончательный return становится последними значениями успешного resume.
Для фрагмента из раздела «Создание» верно: coroutine.create создаёт приостановленную корутину, а coroutine.wrap возвращает функцию-обёртку с другим способом передачи ошибок.
Для фрагмента из раздела «Создание» верно: coroutine.yield отдаёт значения вызывающему resume, а следующий resume передаёт значения обратно в место yield.
Для фрагмента из раздела «Создание» верно: Состояния running, suspended, normal и dead описывают жизненный цикл; возобновление dead-корутины завершается неуспехом, а не перезапускает функцию.
Для фрагмента из раздела «Создание» верно: coroutine.yield отдаёт значения вызывающему resume, а следующий resume передаёт значения обратно в место yield; успешный resume начинается с true.
Вопрос 3 из 25
Что должно пережить замену вспомогательных функций и имён переменных? Речь идёт о центральном правиле раздела «Создание».
Lua Lua · Создание · разбор 3 Копировать
do
local co = coroutine.create(function(a,b) return a+b end)
print(coroutine.status(co))
local ok, value = coroutine.resume(co, 2, 5)
print(ok, value, coroutine.status(co))
end
После правки раздела «Создание» должно оставаться верным: Состояния running, suspended, normal и dead описывают жизненный цикл; возобновление dead-корутины завершается неуспехом, а не перезапускает функцию.
После правки раздела «Создание» должно оставаться верным: coroutine.yield отдаёт значения вызывающему resume, а следующий resume передаёт значения обратно в место yield; успешный resume начинается с true.
После правки раздела «Создание» должно оставаться верным: coroutine.yield отдаёт значения вызывающему resume, а следующий resume передаёт значения обратно в место yield.
После правки раздела «Создание» должно оставаться верным: Первый resume передаёт аргументы функции корутины, последующие — результату yield, а окончательный return становится последними значениями успешного resume.
После правки раздела «Создание» должно оставаться верным: coroutine.create создаёт приостановленную корутину, а coroutine.wrap возвращает функцию-обёртку с другим способом передачи ошибок.
Вопрос 11 из 25
Результат здесь задаёт не соглашение проекта, а правило языка. Какое? Ответ должен описывать основной механизм раздела «Передача значений».
Lua Lua · Передача значений · разбор 1 Копировать
local co=coroutine.create(function(first)
local second = coroutine.yield(first+1)
return first, second
end)
print(coroutine.resume(co,10))
print(coroutine.resume(co,20))
Строку из раздела «Передача значений» нужно читать так: coroutine.yield отдаёт значения вызывающему resume, а следующий resume передаёт значения обратно в место yield; успешный resume начинается с true.
Строку из раздела «Передача значений» нужно читать так: Диагностика должна проверять первый результат resume и сохранять traceback в контексте планировщика; простое присваивание второго результата может принять ошибку за обычное значение.
Строку из раздела «Передача значений» нужно читать так: Первый resume передаёт аргументы функции корутины, последующие — результату yield, а окончательный return становится последними значениями успешного resume.
Строку из раздела «Передача значений» нужно читать так: coroutine.create создаёт приостановленную корутину, а coroutine.wrap возвращает функцию-обёртку с другим способом передачи ошибок.
Строку из раздела «Передача значений» нужно читать так: Состояния running, suspended, normal и dead описывают жизненный цикл; возобновление dead-корутины завершается неуспехом, а не перезапускает функцию.
Вопрос 12 из 25
Какое наблюдение нужно зафиксировать при повторном вызове? Нужен отрицательный сценарий для раздела «Передача значений».
Lua Lua · Передача значений · разбор 2 Копировать
local function reproduce_case()
local co=coroutine.create(function(first)
local second = coroutine.yield(first+1)
return first, second
end)
print(coroutine.resume(co,10))
print(coroutine.resume(co,20))
end
reproduce_case()
Отрицательный сценарий для раздела «Передача значений» фиксирует: Первый resume передаёт аргументы функции корутины, последующие — результату yield, а окончательный return становится последними значениями успешного resume.
Отрицательный сценарий для раздела «Передача значений» фиксирует: Диагностика должна проверять первый результат resume и сохранять traceback в контексте планировщика; простое присваивание второго результата может принять ошибку за обычное значение.
Отрицательный сценарий для раздела «Передача значений» фиксирует: coroutine.yield отдаёт значения вызывающему resume, а следующий resume передаёт значения обратно в место yield; успешный resume начинается с true.
Отрицательный сценарий для раздела «Передача значений» фиксирует: Состояния running, suspended, normal и dead описывают жизненный цикл; возобновление dead-корутины завершается неуспехом, а не перезапускает функцию.
Отрицательный сценарий для раздела «Передача значений» фиксирует: coroutine.create создаёт приостановленную корутину, а coroutine.wrap возвращает функцию-обёртку с другим способом передачи ошибок.
Вопрос 13 из 25
Какое поведение должно совпасть до и после рефакторинга? Нужен основной контракт раздела «Передача значений».
Lua Lua · Передача значений · разбор 3 Копировать
do
local co=coroutine.create(function(first)
local second = coroutine.yield(first+1)
return first, second
end)
print(coroutine.resume(co,10))
print(coroutine.resume(co,20))
end
Контракт рефакторинга раздела «Передача значений»: Состояния running, suspended, normal и dead описывают жизненный цикл; возобновление dead-корутины завершается неуспехом, а не перезапускает функцию.
Контракт рефакторинга раздела «Передача значений»: Диагностика должна проверять первый результат resume и сохранять traceback в контексте планировщика; простое присваивание второго результата может принять ошибку за обычное значение.
Контракт рефакторинга раздела «Передача значений»: coroutine.create создаёт приостановленную корутину, а coroutine.wrap возвращает функцию-обёртку с другим способом передачи ошибок.
Контракт рефакторинга раздела «Передача значений»: Первый resume передаёт аргументы функции корутины, последующие — результату yield, а окончательный return становится последними значениями успешного resume.
Контракт рефакторинга раздела «Передача значений»: coroutine.yield отдаёт значения вызывающему resume, а следующий resume передаёт значения обратно в место yield; успешный resume начинается с true.
Вопрос 21 из 25
Что именно объясняет поведение строки «local co=coroutine.create(function()»? Нужна именно центральная гарантия раздела «Диагностика результата».
Lua Lua · Диагностика результата · разбор 1 Копировать
local co=coroutine.create(function()
coroutine.yield("step")
error("broken")
end)
local ok,v=coroutine.resume(co)
local ok2,err=coroutine.resume(co)
print(ok,v,ok2,err)
В коде раздела «Диагностика результата» срабатывает правило: Состояния running, suspended, normal и dead описывают жизненный цикл.
В коде раздела «Диагностика результата» срабатывает правило: coroutine.create создаёт приостановленную корутину, а coroutine.wrap возвращает функцию-обёртку с другим способом передачи ошибок.
В коде раздела «Диагностика результата» срабатывает правило: coroutine.yield отдаёт значения вызывающему resume, а следующий resume передаёт значения обратно в место yield.
В коде раздела «Диагностика результата» срабатывает правило: Диагностика должна проверять первый результат resume и сохранять traceback в контексте планировщика.
В коде раздела «Диагностика результата» срабатывает правило: Возобновление dead-корутины завершается неуспехом, а не перезапускает функцию.