LU Lua  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Итераторы и generic for

Тест по теме «Итераторы и generic for» проверяет чтение кода, поиск скрытых допущений и выбор решения для обычных и граничных сценариев. В нём 20 вопросов, из них 10 содержат фрагменты Lua. Условия отдельно отмечают случаи, зависящие от версии языка или внешней библиотеки.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 55 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 1 из 20
Какое правило точнее всего описывает происходящее в строке «for i, v in iter, {2,3,4}, 0 do print(i, v) end»? Нужна именно центральная гарантия раздела «Функция-итератор».
LuaLua · Функция-итератор · разбор 1
local function iter(state, i)
  i = i + 1
  local v = state[i]
  if v then return i, v * v end
end
for i, v in iter, {2,3,4}, 0 do print(i, v) end
Вопрос 2 из 20
Какое последствие проявится только при другом входе или повторном вызове? Ищется граничное следствие правила из раздела «Функция-итератор».
LuaLua · Функция-итератор · разбор 2
local function reproduce_case()
  local function iter(state, i)
    i = i + 1
    local v = state[i]
    if v then return i, v * v end
  end
  for i, v in iter, {2,3,4}, 0 do print(i, v) end
end
reproduce_case()
Вопрос 3 из 20
Какой результат обязан подтверждать регрессионный тест после правки? Нужен основной контракт раздела «Функция-итератор».
LuaLua · Функция-итератор · разбор 3
do
  local function iter(state, i)
    i = i + 1
    local v = state[i]
    if v then return i, v * v end
  end
  for i, v in iter, {2,3,4}, 0 do print(i, v) end
end
Вопрос 4 из 20
Команда меняет раздел «Функция-итератор» в рабочем модуле. На какое решение можно опереться при повторном запуске и отказе зависимости? Выберите практическое следствие раздела «Функция-итератор».
Вопрос 5 из 20
Что помогает не переносить в раздел «Функция-итератор» привычки из другого языка или среды? Нужна полная формулировка раздела «Функция-итератор».
Вопрос 6 из 20
На каком правиле держится поведение этого кода? Выберите основное правило раздела «Состояние обхода».
LuaLua · Состояние обхода · разбор 1
local function values(t)
  local i = 0
  return function()
    i = i + 1
    return t[i]
  end
end
local a, b = values({1,2}), values({10,20})
print(a(), b(), a())
Вопрос 7 из 20
Какой крайний случай важнее всего добавить к проверке? Выберите именно проверяемую границу раздела «Состояние обхода».
LuaLua · Состояние обхода · разбор 2
local function reproduce_case()
  local function values(t)
    local i = 0
    return function()
      i = i + 1
      return t[i]
    end
  end
  local a, b = values({1,2}), values({10,20})
  print(a(), b(), a())
end
reproduce_case()
Вопрос 8 из 20
Какой смысл фрагмента нельзя спрятать в комментарии вместо проверки? Речь идёт о центральном правиле раздела «Состояние обхода».
LuaLua · Состояние обхода · разбор 3
do
  local function values(t)
    local i = 0
    return function()
      i = i + 1
      return t[i]
    end
  end
  local a, b = values({1,2}), values({10,20})
  print(a(), b(), a())
end
Вопрос 9 из 20
После переноса кода раздел «Состояние обхода» стал работать иначе. На какое правило опереться при исправлении? Ответ должен выражать проверяемое следствие раздела «Состояние обхода».
Вопрос 10 из 20
Что отличает корректное понимание раздела «Состояние обхода» от правдоподобного заблуждения? Ответ должен охватывать весь раздел «Состояние обхода».
Вопрос 11 из 20
На каком правиле держится поведение этого кода? Выберите основное правило раздела «Итератор с явным состоянием».
LuaLua · Итератор с явным состоянием · разбор 1
local function next_even(t, k)
  local nk, v = next(t, k)
  while nk and v % 2 ~= 0 do nk, v = next(t, nk) end
  return nk, v
end
for k,v in next_even,{a=1,b=2,c=4},nil do print(k,v) end
Вопрос 12 из 20
Какое наблюдение нужно зафиксировать при повторном вызове? Выберите именно проверяемую границу раздела «Итератор с явным состоянием».
LuaLua · Итератор с явным состоянием · разбор 2
local function reproduce_case()
  local function next_even(t, k)
    local nk, v = next(t, k)
    while nk and v % 2 ~= 0 do nk, v = next(t, nk) end
    return nk, v
  end
  for k,v in next_even,{a=1,b=2,c=4},nil do print(k,v) end
end
reproduce_case()
Вопрос 13 из 20
Что здесь является частью контракта, а не случайностью текущей записи? Выберите гарантию, определяющую раздел «Итератор с явным состоянием».
Вопрос 14 из 20
Решение по разделу «Итератор с явным состоянием» должно пережить обновление зависимости. Что фиксировать в контракте? Выберите практическое следствие раздела «Итератор с явным состоянием».
Вопрос 15 из 20
Что должен помнить разработчик, впервые работающий с разделом «Итератор с явным состоянием»? Нужна полная формулировка раздела «Итератор с явным состоянием».
Вопрос 16 из 20
Какое правило точнее всего описывает происходящее в строке «for i,v in reverse({"a","b","c"}) do print(i,v) end»? Ответ должен описывать основной механизм раздела «Пользовательский обход».
LuaLua · Пользовательский обход · разбор 1
local function reverse(t)
  local i = #t + 1
  return function()
    i = i - 1
    if i > 0 then return i, t[i] end
  end
end
for i,v in reverse({"a","b","c"}) do print(i,v) end
Вопрос 17 из 20
Что здесь важнее проверить, чем само отсутствие ошибки? Ищется граничное следствие правила из раздела «Пользовательский обход».
LuaLua · Пользовательский обход · разбор 2
local function reproduce_case()
  local function reverse(t)
    local i = #t + 1
    return function()
      i = i - 1
      if i > 0 then return i, t[i] end
    end
  end
  for i,v in reverse({"a","b","c"}) do print(i,v) end
end
reproduce_case()
Вопрос 18 из 20
Какое правило должно остаться наблюдаемым после правки? Речь идёт о центральном правиле раздела «Пользовательский обход».
Вопрос 19 из 20
Нужно сделать поведение «Пользовательский обход» предсказуемым для следующего разработчика. Что выбрать? Выберите практическое следствие раздела «Пользовательский обход».
Вопрос 20 из 20
Какое правило раздела «Пользовательский обход» стоит закрепить в тестах? Нужна полная формулировка раздела «Пользовательский обход».

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу