💡 Инструкция: Выберите один ответ из пяти. На работу отведено 55 минут. После завершения откроются правильные ответы, объяснения и результаты по темам.
Вопрос 7 из 20
Какой контрольный тест лучше всего проверит правило, связанное с `struct Window{T<:Real}`?
Julia Julia · Ограничения Копировать
struct Window{T<:Real}
lo::T
hi::T
end
width(w::Window) = w.hi - w.lo
@show Window(1.0, 2.5)
Проверить на отдельном примере, что ограничение `where {T<:Real}` автоматически преобразует все числовые аргументы к абстрактному типу `Real` перед вызовом метода.
Проверить на отдельном примере, что запись `T<:Real` разрешает присваивать в поле любое значение `Real` независимо от конкретного параметра `T` экземпляра.
Проверить на отдельном примере, что если `Float64 <: Real`, то отношение подтипов автоматически переносится на любой контейнер: `Window{Float64} <: Window{Real}`.
Проверить на отдельном примере, что ограничение `T<:Real` задаёт допустимое множество параметров типа, но не делает параметрический тип ковариантным: `Window{Float64}` не является подтипом `Window{Real}`.
Проверить на отдельном примере, что типы `Window{Int}` и `Window{Float64}` имеют одну и ту же конкретную структуру, а различие параметров проверяется только во время выполнения.
Вопрос 16 из 20
Как нужно интерпретировать `return sum(c.values)`, не добавляя к коду лишних гарантий?
f_T\;\text{специализируется по}\;T
Julia Julia · Специализация Копировать
struct StaticConfig{N,T}
values::NTuple{N,T}
end
function total(c::StaticConfig{N,T}) where {N,T}
return sum(c.values)
end
@show total(StaticConfig((1, 2, 3)))
Специализация создаётся по реально встреченным типам аргументов; чрезмерное число значений в типовых параметрах может увеличить компиляцию и размер кода.
Ограничение типового параметра множеством подтипов `Real` задаёт допустимые значения `T`, но не превращает `Box{Float64}` в подтип `Box{Real}`.
Чем больше значений кодируется в параметрах типа, тем меньше компиляции, потому что один метод обслуживает все варианты.
Параметрический тип хранит типовые отношения явно: `Point{T}` и методы с `where T` позволяют компилятору специализировать код без перехода к `Any`.
Отношение `Float64 <: Real` распространяется на параметрический контейнер, поэтому `Container{Float64}` является подтипом `Container{Real}`.
Вопрос 17 из 20
Что нужно подтвердить отдельным примером для `return sum(c.values)`?
Julia Julia · Специализация Копировать
struct StaticConfig{N,T}
values::NTuple{N,T}
end
function total(c::StaticConfig{N,T}) where {N,T}
return sum(c.values)
end
@show total(StaticConfig((1, 2, 3)))
Проверить на отдельном примере, что чем больше значений кодируется в параметрах типа, тем меньше компиляции, потому что один метод обслуживает все варианты.
Проверить на отдельном примере, что специализация создаётся по реально встреченным типам аргументов; чрезмерное число значений в типовых параметрах может увеличить компиляцию и размер кода.
Проверить на отдельном примере, что ограничение типового параметра множеством подтипов `Real` задаёт допустимые значения `T`, но не превращает `Box{Float64}` в подтип `Box{Real}`.
Проверить на отдельном примере, что параметрический тип хранит типовые отношения явно: `Point{T}` и методы с `where T` позволяют компилятору специализировать код без перехода к `Any`.
Проверить на отдельном примере, что отношение `Float64 <: Real` распространяется на параметрический контейнер, поэтому `Container{Float64}` является подтипом `Container{Real}`.
Вопрос 18 из 20
Какой контракт следует закрепить при переработке строки `return sum(c.values)`?
Julia Julia · Специализация Копировать
struct StaticConfig{N,T}
values::NTuple{N,T}
end
function total(c::StaticConfig{N,T}) where {N,T}
return sum(c.values)
end
@show total(StaticConfig((1, 2, 3)))
Сохранить в реализации правило: Отношение `Float64 <: Real` распространяется на параметрический контейнер, поэтому `Container{Float64}` является подтипом `Container{Real}`.
Сохранить в реализации правило: Чем больше значений кодируется в параметрах типа, тем меньше компиляции, потому что один метод обслуживает все варианты.
Сохранить в реализации правило: Ограничение типового параметра множеством подтипов `Real` задаёт допустимые значения `T`, но не превращает `Box{Float64}` в подтип `Box{Real}`.
Сохранить в реализации правило: Специализация создаётся по реально встреченным типам аргументов; чрезмерное число значений в типовых параметрах может увеличить компиляцию и размер кода.
Сохранить в реализации правило: Параметрический тип хранит типовые отношения явно: `Point{T}` и методы с `where T` позволяют компилятору специализировать код без перехода к `Any`.