💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 85 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 6 из 30
Результат здесь задаёт не соглашение проекта, а правило языка. Какое? Нужна именно центральная гарантия раздела «Метатаблицы».
Lua Lua · Метатаблицы · разбор 1 Копировать
local Node={}
Node.__index=function(self,key)
return function(value)
self.fields[#self.fields+1]={name=key,value=value}
return self
end
end
local model=setmetatable({fields={}},Node):name("user"):age(18)
Поведение строки из раздела «Метатаблицы» определяется правилом: Тесты DSL включают корректные примеры, опечатки, несовместимые версии и снимок построенной модели; проверка только синтаксической загрузки не подтверждает смысл.
Поведение строки из раздела «Метатаблицы» определяется правилом: DSL следует выполнять в минимальном окружении и отделять построение модели от её применения; функция конфигурации не должна незаметно менять внешний процесс.
Поведение строки из раздела «Метатаблицы» определяется правилом: Табличный синтаксис удобен для декларативного DSL, когда ключи и вложенность имеют однозначный смысл; скрытые позиционные соглашения быстро делают конфигурацию нечитаемой.
Поведение строки из раздела «Метатаблицы» определяется правилом: Метатаблицы могут реализовать ленивые узлы и проверки, но магия __index и __call должна выдавать понятную ошибку с путём к элементу, а не молча создавать опечатанные поля.
Поведение строки из раздела «Метатаблицы» определяется правилом: Диагностика конфигурации должна собирать несколько ошибок с местом и ожидаемым типом, когда это безопасно; первая техническая ошибка Lua редко помогает автору DSL.
Вопрос 13 из 30
Какое требование стоит закрепить тестом до начала рефакторинга? Нужен основной контракт раздела «Контекст выполнения».
Lua Lua · Контекст выполнения · разбор 3 Копировать
do
local env={route=route,field=field,enum=enum}
local chunk=assert(load(source,"schema","t",env))
local model=chunk()
validate_model(model)
end
В разделе «Контекст выполнения» нельзя потерять правило: DSL следует выполнять в минимальном окружении и отделять построение модели от её применения; функция конфигурации не должна незаметно менять внешний процесс.
В разделе «Контекст выполнения» нельзя потерять правило: Тесты DSL включают корректные примеры, опечатки, несовместимые версии и снимок построенной модели; проверка только синтаксической загрузки не подтверждает смысл.
В разделе «Контекст выполнения» нельзя потерять правило: Метатаблицы могут реализовать ленивые узлы и проверки, но магия __index и __call должна выдавать понятную ошибку с путём к элементу, а не молча создавать опечатанные поля.
В разделе «Контекст выполнения» нельзя потерять правило: Диагностика конфигурации должна собирать несколько ошибок с местом и ожидаемым типом, когда это безопасно; первая техническая ошибка Lua редко помогает автору DSL.
В разделе «Контекст выполнения» нельзя потерять правило: Переносимость требует избегать зависимости от неопределённого порядка pairs и особенностей диалекта; версия DSL должна быть явной и иметь путь миграции.
Вопрос 16 из 30
В чём ключ к разбору строки «return nil,diagnostic{file=file,path=current_path(),cause=model}»? Нужна именно центральная гарантия раздела «Диагностика конфигурации».
Lua Lua · Диагностика конфигурации · разбор 1 Копировать
local ok,model=pcall(parse_dsl,source)
if not ok then
return nil,diagnostic{file=file,path=current_path(),cause=model}
end
return validate_all(model)
Строку из раздела «Диагностика конфигурации» нужно читать так: DSL следует выполнять в минимальном окружении и отделять построение модели от её применения; функция конфигурации не должна незаметно менять внешний процесс.
Строку из раздела «Диагностика конфигурации» нужно читать так: Табличный синтаксис удобен для декларативного DSL, когда ключи и вложенность имеют однозначный смысл; скрытые позиционные соглашения быстро делают конфигурацию нечитаемой.
Строку из раздела «Диагностика конфигурации» нужно читать так: Метатаблицы могут реализовать ленивые узлы и проверки, но магия __index и __call должна выдавать понятную ошибку с путём к элементу, а не молча создавать опечатанные поля.
Строку из раздела «Диагностика конфигурации» нужно читать так: Диагностика конфигурации должна собирать несколько ошибок с местом и ожидаемым типом, когда это безопасно; первая техническая ошибка Lua редко помогает автору DSL.
Строку из раздела «Диагностика конфигурации» нужно читать так: Тесты DSL включают корректные примеры, опечатки, несовместимые версии и снимок построенной модели; проверка только синтаксической загрузки не подтверждает смысл.
Вопрос 17 из 30
Какой отказ должен быть воспроизводимым в тесте? Ищется граничное следствие правила из раздела «Диагностика конфигурации».
Lua Lua · Диагностика конфигурации · разбор 2 Копировать
local function reproduce_case()
local ok,model=pcall(parse_dsl,source)
if not ok then
return nil,diagnostic{file=file,path=current_path(),cause=model}
end
return validate_all(model)
end
reproduce_case()
Граничный тест раздела «Диагностика конфигурации» должен показать: DSL следует выполнять в минимальном окружении и отделять построение модели от её применения; функция конфигурации не должна незаметно менять внешний процесс.
Граничный тест раздела «Диагностика конфигурации» должен показать: Диагностика конфигурации должна собирать несколько ошибок с местом и ожидаемым типом, когда это безопасно; первая техническая ошибка Lua редко помогает автору DSL.
Граничный тест раздела «Диагностика конфигурации» должен показать: Метатаблицы могут реализовать ленивые узлы и проверки, но магия __index и __call должна выдавать понятную ошибку с путём к элементу, а не молча создавать опечатанные поля.
Граничный тест раздела «Диагностика конфигурации» должен показать: Тесты DSL включают корректные примеры, опечатки, несовместимые версии и снимок построенной модели; проверка только синтаксической загрузки не подтверждает смысл.
Граничный тест раздела «Диагностика конфигурации» должен показать: Табличный синтаксис удобен для декларативного DSL, когда ключи и вложенность имеют однозначный смысл; скрытые позиционные соглашения быстро делают конфигурацию нечитаемой.
Вопрос 18 из 30
Что здесь является частью контракта, а не случайностью текущей записи? Нужен основной контракт раздела «Диагностика конфигурации».
Lua Lua · Диагностика конфигурации · разбор 3 Копировать
do
local ok,model=pcall(parse_dsl,source)
if not ok then
return nil,diagnostic{file=file,path=current_path(),cause=model}
end
return validate_all(model)
end
В разделе «Диагностика конфигурации» нельзя потерять правило: Тесты DSL включают корректные примеры, опечатки, несовместимые версии и снимок построенной модели; проверка только синтаксической загрузки не подтверждает смысл.
В разделе «Диагностика конфигурации» нельзя потерять правило: Диагностика конфигурации должна собирать несколько ошибок с местом и ожидаемым типом, когда это безопасно; первая техническая ошибка Lua редко помогает автору DSL.
В разделе «Диагностика конфигурации» нельзя потерять правило: Табличный синтаксис удобен для декларативного DSL, когда ключи и вложенность имеют однозначный смысл; скрытые позиционные соглашения быстро делают конфигурацию нечитаемой.
В разделе «Диагностика конфигурации» нельзя потерять правило: Метатаблицы могут реализовать ленивые узлы и проверки, но магия __index и __call должна выдавать понятную ошибку с путём к элементу, а не молча создавать опечатанные поля.
В разделе «Диагностика конфигурации» нельзя потерять правило: DSL следует выполнять в минимальном окружении и отделять построение модели от её применения; функция конфигурации не должна незаметно менять внешний процесс.