💡 Инструкция: Выберите один ответ из пяти. На работу отведено 55 минут. После завершения откроются правильные ответы, объяснения и результаты по темам.
Вопрос 1 из 20
Что именно следует из фрагмента с `area(x::Number) = x^2`?
m^*=\arg\max_{m\in M(f,x)}\operatorname{specificity}(m)
Julia Julia · Методы Копировать
area(x::Number) = x^2
area(x::Tuple{<:Number,<:Number}) = x[1] * x[2]
area(x::AbstractVector) = sum(abs2, x)
@show area(3) area((2, 5)) area([1, 2])
Неоднозначность возникает, когда два метода применимы, но ни один не специфичнее другого; её устраняют явным методом для пересечения сигнатур.
Таблица методов выбирается по первому позиционному аргументу, а остальные типы используются только для проверки внутри вызванного метода.
Выбор метода определяется типами позиционных аргументов, тогда как именованные аргументы не участвуют в множественной диспетчеризации.
Функция Julia может иметь несколько методов, а диспетчеризация выбирает наиболее специфичный применимый метод по типам всех позиционных аргументов.
Аннотации в сигнатуре ограничивают применимость метода; слишком узкая сигнатура ухудшает повторное использование и сама по себе не ускоряет код.
Вопрос 2 из 20
Какой контрольный тест лучше всего проверит правило, связанное с `area(x::Number) = x^2`?
Julia Julia · Методы Копировать
area(x::Number) = x^2
area(x::Tuple{<:Number,<:Number}) = x[1] * x[2]
area(x::AbstractVector) = sum(abs2, x)
@show area(3) area((2, 5)) area([1, 2])
Проверить на отдельном примере, что функция Julia может иметь несколько методов, а диспетчеризация выбирает наиболее специфичный применимый метод по типам всех позиционных аргументов.
Проверить на отдельном примере, что неоднозначность возникает, когда два метода применимы, но ни один не специфичнее другого; её устраняют явным методом для пересечения сигнатур.
Проверить на отдельном примере, что аннотации в сигнатуре ограничивают применимость метода; слишком узкая сигнатура ухудшает повторное использование и сама по себе не ускоряет код.
Проверить на отдельном примере, что выбор метода определяется типами позиционных аргументов, тогда как именованные аргументы не участвуют в множественной диспетчеризации.
Проверить на отдельном примере, что таблица методов выбирается по первому позиционному аргументу, а остальные типы используются только для проверки внутри вызванного метода.
Вопрос 3 из 20
Какое решение устраняет риск вокруг `area(x::Number) = x^2`, не меняя поведение на допустимых данных?
Julia Julia · Методы Копировать
area(x::Number) = x^2
area(x::Tuple{<:Number,<:Number}) = x[1] * x[2]
area(x::AbstractVector) = sum(abs2, x)
@show area(3) area((2, 5)) area([1, 2])
Сохранить в реализации правило: Функция Julia может иметь несколько методов, а диспетчеризация выбирает наиболее специфичный применимый метод по типам всех позиционных аргументов.
Сохранить в реализации правило: Таблица методов выбирается по первому позиционному аргументу, а остальные типы используются только для проверки внутри вызванного метода.
Сохранить в реализации правило: Неоднозначность возникает, когда два метода применимы, но ни один не специфичнее другого; её устраняют явным методом для пересечения сигнатур.
Сохранить в реализации правило: Выбор метода определяется типами позиционных аргументов, тогда как именованные аргументы не участвуют в множественной диспетчеризации.
Сохранить в реализации правило: Аннотации в сигнатуре ограничивают применимость метода; слишком узкая сигнатура ухудшает повторное использование и сама по себе не ускоряет код.
Вопрос 4 из 20
Какой результат приёмочного теста подтвердит корректность участка с `area(x::Number) = x^2`?
m^*=\arg\max_{m\in M(f,x)}\operatorname{specificity}(m)
Приёмка должна подтвердить, что неоднозначность возникает, когда два метода применимы, но ни один не специфичнее другого; её устраняют явным методом для пересечения сигнатур.
Приёмка должна подтвердить, что выбор метода определяется типами позиционных аргументов, тогда как именованные аргументы не участвуют в множественной диспетчеризации.
Приёмка должна подтвердить, что функция Julia может иметь несколько методов, а диспетчеризация выбирает наиболее специфичный применимый метод по типам всех позиционных аргументов.
Приёмка должна подтвердить, что таблица методов выбирается по первому позиционному аргументу, а остальные типы используются только для проверки внутри вызванного метода.
Приёмка должна подтвердить, что аннотации в сигнатуре ограничивают применимость метода; слишком узкая сигнатура ухудшает повторное использование и сама по себе не ускоряет код.
Вопрос 7 из 20
Что нужно подтвердить отдельным примером для `function clamp01(x::Real)::Float64`?
Julia Julia · Сигнатуры Копировать
function clamp01(x::Real)::Float64
return min(max(x, zero(x)), one(x))
end
@show clamp01(3//2)
Проверить на отдельном примере, что таблица методов выбирается по первому позиционному аргументу, а остальные типы используются только для проверки внутри вызванного метода.
Проверить на отдельном примере, что функция Julia может иметь несколько методов, а диспетчеризация выбирает наиболее специфичный применимый метод по типам всех позиционных аргументов.
Проверить на отдельном примере, что аннотации в сигнатуре ограничивают применимость метода; слишком узкая сигнатура ухудшает повторное использование и сама по себе не ускоряет код.
Проверить на отдельном примере, что неоднозначность возникает, когда два метода применимы, но ни один не специфичнее другого; её устраняют явным методом для пересечения сигнатур.
Проверить на отдельном примере, что аннотация возвращаемого типа ускоряет функцию независимо от того, какие преобразования она вынуждена выполнить.
Вопрос 9 из 20
После обновления Julia или пакета поведение участка с `function clamp01(x::Real)::Float64` изменилось. Какой критерий приёмки остаётся корректным?
f:(T_1,\ldots,T_n)\to R
Приёмка должна подтвердить, что аннотации в сигнатуре ограничивают применимость метода; слишком узкая сигнатура ухудшает повторное использование и сама по себе не ускоряет код.
Приёмка должна подтвердить, что неоднозначность возникает, когда два метода применимы, но ни один не специфичнее другого; её устраняют явным методом для пересечения сигнатур.
Приёмка должна подтвердить, что аннотация возвращаемого типа ускоряет функцию независимо от того, какие преобразования она вынуждена выполнить.
Приёмка должна подтвердить, что таблица методов выбирается по первому позиционному аргументу, а остальные типы используются только для проверки внутри вызванного метода.
Приёмка должна подтвердить, что функция Julia может иметь несколько методов, а диспетчеризация выбирает наиболее специфичный применимый метод по типам всех позиционных аргументов.
Вопрос 11 из 20
Какой механизм Julia определяет поведение строки `route(x::Integer, y::Real; mode=:safe) = (:integer, mode)`?
\operatorname{dispatch}=D(T_1,\ldots,T_n)
Julia Julia · Выбор метода Копировать
route(x::Integer, y::Real; mode=:safe) = (:integer, mode)
route(x::Real, y::Integer; mode=:safe) = (:real, mode)
@show route(1, 2.0)
Аннотации в сигнатуре ограничивают применимость метода; слишком узкая сигнатура ухудшает повторное использование и сама по себе не ускоряет код.
Выбор метода определяется типами позиционных аргументов, тогда как именованные аргументы не участвуют в множественной диспетчеризации.
Таблица методов выбирается по первому позиционному аргументу, а остальные типы используются только для проверки внутри вызванного метода.
Тип именованного аргумента участвует в выборе метода так же, как тип позиционного аргумента.
Неоднозначность возникает, когда два метода применимы, но ни один не специфичнее другого; её устраняют явным методом для пересечения сигнатур.
Вопрос 12 из 20
Какой тест точнее всего зафиксирует границу поведения `route(x::Integer, y::Real; mode=:safe) = (:integer, mode)`?
Julia Julia · Выбор метода Копировать
route(x::Integer, y::Real; mode=:safe) = (:integer, mode)
route(x::Real, y::Integer; mode=:safe) = (:real, mode)
@show route(1, 2.0)
Проверить на отдельном примере, что тип именованного аргумента участвует в выборе метода так же, как тип позиционного аргумента.
Проверить на отдельном примере, что таблица методов выбирается по первому позиционному аргументу, а остальные типы используются только для проверки внутри вызванного метода.
Проверить на отдельном примере, что выбор метода определяется типами позиционных аргументов, тогда как именованные аргументы не участвуют в множественной диспетчеризации.
Проверить на отдельном примере, что аннотации в сигнатуре ограничивают применимость метода; слишком узкая сигнатура ухудшает повторное использование и сама по себе не ускоряет код.
Проверить на отдельном примере, что неоднозначность возникает, когда два метода применимы, но ни один не специфичнее другого; её устраняют явным методом для пересечения сигнатур.
Вопрос 13 из 20
Какую гарантию должна сохранить правка участка с `route(x::Integer, y::Real; mode=:safe) = (:integer, mode)`?
Julia Julia · Выбор метода Копировать
route(x::Integer, y::Real; mode=:safe) = (:integer, mode)
route(x::Real, y::Integer; mode=:safe) = (:real, mode)
@show route(1, 2.0)
Сохранить в реализации правило: Неоднозначность возникает, когда два метода применимы, но ни один не специфичнее другого; её устраняют явным методом для пересечения сигнатур.
Сохранить в реализации правило: Выбор метода определяется типами позиционных аргументов, тогда как именованные аргументы не участвуют в множественной диспетчеризации.
Сохранить в реализации правило: Аннотации в сигнатуре ограничивают применимость метода; слишком узкая сигнатура ухудшает повторное использование и сама по себе не ускоряет код.
Сохранить в реализации правило: Тип именованного аргумента участвует в выборе метода так же, как тип позиционного аргумента.
Сохранить в реализации правило: Таблица методов выбирается по первому позиционному аргументу, а остальные типы используются только для проверки внутри вызванного метода.
Вопрос 14 из 20
Две реализации участка с `route(x::Integer, y::Real; mode=:safe) = (:integer, mode)` совпадают на обычных данных. Что необходимо проверить перед выпуском?
\operatorname{dispatch}=D(T_1,\ldots,T_n)
Приёмка должна подтвердить, что аннотации в сигнатуре ограничивают применимость метода; слишком узкая сигнатура ухудшает повторное использование и сама по себе не ускоряет код.
Приёмка должна подтвердить, что неоднозначность возникает, когда два метода применимы, но ни один не специфичнее другого; её устраняют явным методом для пересечения сигнатур.
Приёмка должна подтвердить, что тип именованного аргумента участвует в выборе метода так же, как тип позиционного аргумента.
Приёмка должна подтвердить, что таблица методов выбирается по первому позиционному аргументу, а остальные типы используются только для проверки внутри вызванного метода.
Приёмка должна подтвердить, что выбор метода определяется типами позиционных аргументов, тогда как именованные аргументы не участвуют в множественной диспетчеризации.
Вопрос 16 из 20
Что именно следует из фрагмента с `mergevalue(x::Integer, y::Real) = x + y`?
m_1\nprec m_2\land m_2\nprec m_1
Julia Julia · Неоднозначность Копировать
mergevalue(x::Integer, y::Real) = x + y
mergevalue(x::Real, y::Integer) = x - y
# Какой метод нужен, чтобы вызов ниже был однозначным?
@show mergevalue(1, 2)
Функция Julia может иметь несколько методов, а диспетчеризация выбирает наиболее специфичный применимый метод по типам всех позиционных аргументов.
Если два метода подходят к вызову, Julia выбирает тот, который был объявлен позже, поэтому явный метод пересечения не нужен.
Таблица методов выбирается по первому позиционному аргументу, а остальные типы используются только для проверки внутри вызванного метода.
Неоднозначность возникает, когда два метода применимы, но ни один не специфичнее другого; её устраняют явным методом для пересечения сигнатур.
Аннотации в сигнатуре ограничивают применимость метода; слишком узкая сигнатура ухудшает повторное использование и сама по себе не ускоряет код.
Вопрос 17 из 20
Какой тест точнее всего зафиксирует границу поведения `mergevalue(x::Integer, y::Real) = x + y`?
Julia Julia · Неоднозначность Копировать
mergevalue(x::Integer, y::Real) = x + y
mergevalue(x::Real, y::Integer) = x - y
# Какой метод нужен, чтобы вызов ниже был однозначным?
@show mergevalue(1, 2)
Проверить на отдельном примере, что таблица методов выбирается по первому позиционному аргументу, а остальные типы используются только для проверки внутри вызванного метода.
Проверить на отдельном примере, что функция Julia может иметь несколько методов, а диспетчеризация выбирает наиболее специфичный применимый метод по типам всех позиционных аргументов.
Проверить на отдельном примере, что неоднозначность возникает, когда два метода применимы, но ни один не специфичнее другого; её устраняют явным методом для пересечения сигнатур.
Проверить на отдельном примере, что аннотации в сигнатуре ограничивают применимость метода; слишком узкая сигнатура ухудшает повторное использование и сама по себе не ускоряет код.
Проверить на отдельном примере, что если два метода подходят к вызову, Julia выбирает тот, который был объявлен позже, поэтому явный метод пересечения не нужен.
Вопрос 18 из 20
Какое требование к `mergevalue(x::Integer, y::Real) = x + y` важнее удобной детали текущей реализации?
Julia Julia · Неоднозначность Копировать
mergevalue(x::Integer, y::Real) = x + y
mergevalue(x::Real, y::Integer) = x - y
# Какой метод нужен, чтобы вызов ниже был однозначным?
@show mergevalue(1, 2)
Сохранить в реализации правило: Таблица методов выбирается по первому позиционному аргументу, а остальные типы используются только для проверки внутри вызванного метода.
Сохранить в реализации правило: Аннотации в сигнатуре ограничивают применимость метода; слишком узкая сигнатура ухудшает повторное использование и сама по себе не ускоряет код.
Сохранить в реализации правило: Если два метода подходят к вызову, Julia выбирает тот, который был объявлен позже, поэтому явный метод пересечения не нужен.
Сохранить в реализации правило: Функция Julia может иметь несколько методов, а диспетчеризация выбирает наиболее специфичный применимый метод по типам всех позиционных аргументов.
Сохранить в реализации правило: Неоднозначность возникает, когда два метода применимы, но ни один не специфичнее другого; её устраняют явным методом для пересечения сигнатур.
Вопрос 19 из 20
При переносе кода с `mergevalue(x::Integer, y::Real) = x + y` в библиотеку какой критерий нельзя заменять впечатлением «пример работает»?
m_1\nprec m_2\land m_2\nprec m_1
Приёмка должна подтвердить, что если два метода подходят к вызову, Julia выбирает тот, который был объявлен позже, поэтому явный метод пересечения не нужен.
Приёмка должна подтвердить, что таблица методов выбирается по первому позиционному аргументу, а остальные типы используются только для проверки внутри вызванного метода.
Приёмка должна подтвердить, что функция Julia может иметь несколько методов, а диспетчеризация выбирает наиболее специфичный применимый метод по типам всех позиционных аргументов.
Приёмка должна подтвердить, что аннотации в сигнатуре ограничивают применимость метода; слишком узкая сигнатура ухудшает повторное использование и сама по себе не ускоряет код.
Приёмка должна подтвердить, что неоднозначность возникает, когда два метода применимы, но ни один не специфичнее другого; её устраняют явным методом для пересечения сигнатур.