💡 Инструкция: Выберите один ответ из пяти. На работу отведено 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 может иметь несколько методов, а диспетчеризация выбирает наиболее специфичный применимый метод по типам всех позиционных аргументов.
Приёмка должна подтвердить, что неоднозначность возникает, когда два метода применимы, но ни один не специфичнее другого; её устраняют явным методом для пересечения сигнатур.