Size: a a a

Язык программирования Julia / Julia programming language

2020 February 25

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
я кстати понял, хех ) ну да, Function это же абстрактный тип
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
typeof([1,2,3]) <: Vector{Integer}
# false
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
И это при том, что Int — подтип Integer
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
я знаю что гуглить (ко и контравариантные типы), но я не понимаю, чего это такое
источник

ВФ

Виктор Федоров in Язык программирования Julia / Julia programming language
Получается, что надо копать...
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
общее правило: если T <: S, то необязательно Vector{T} <: Vector{S}
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
для того, чтобы проверить, что тип x — это вектор из "каких-то функций", можно сделать так:
источник

ВФ

Виктор Федоров in Язык программирования Julia / Julia programming language
Правило - да, но оно кажется, на первый взгляд, странным
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
typeof(x) <: Vector{<:Function}
# true
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
там была какая-то rationale, они в типах очень прошареные ребята
источник

ВФ

Виктор Федоров in Язык программирования Julia / Julia programming language
Спасибо за обсуждение
источник

ВФ

Виктор Федоров in Язык программирования Julia / Julia programming language
Андрей Оськин
Так а чем просто vector не устраивает? А ещё лучше вообще тип не указывать.
Я не внимательно ответил, на самом деле

typeof(Vector([t->k*t for k=1:3]))<: Vector{Function}
false

это не устраивало
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
источник

AP

Alexander Plavin in Язык программирования Julia / Julia programming language
Виктор Федоров
Правило - да, но оно кажется, на первый взгляд, странным
наоборот логичное правило
альтернатива какая предлагается? Считать A{T} <: A{S} в случае T <: S?
тогда такая проблема: рассмотрим какой-нибудь объект A{T}, умеющий обрабатывать тип T, поданный ему на вход, т.е. (a::A{T})(x::T) = ...
в частности, A{Int} может использовать битовую структуру конкретно Int'а
тут понятно, что A{Int} не должно быть <: A{Real}, т.к. иначе получалось бы что ему можно подать любое число на вход
источник

AP

Alexander Plavin in Язык программирования Julia / Julia programming language
или даже проще: в Vector{Real} можно вставить Float, в Vector{Int} нельзя
источник

ВФ

Виктор Федоров in Язык программирования Julia / Julia programming language
Alexander Plavin
наоборот логичное правило
альтернатива какая предлагается? Считать A{T} <: A{S} в случае T <: S?
тогда такая проблема: рассмотрим какой-нибудь объект A{T}, умеющий обрабатывать тип T, поданный ему на вход, т.е. (a::A{T})(x::T) = ...
в частности, A{Int} может использовать битовую структуру конкретно Int'а
тут понятно, что A{Int} не должно быть <: A{Real}, т.к. иначе получалось бы что ему можно подать любое число на вход
Спасибо за ответ

А какое может быть объяснение:


julia> typeof([t->1*t,  t->2*t,  t->3*t]) <: Vector{Function}
true

julia> typeof([t->k*t for k=1:3]) <: Vector{Function}
false
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Виктор Федоров
Я не внимательно ответил, на самом деле

typeof(Vector([t->k*t for k=1:3]))<: Vector{Function}
false

это не устраивало
Я имел в виду, что исходный вопрос был про аннотацию аргумента, но зачем вообще это делать? Никакой выгоды нет, зато куча проблем.
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Если аргумент должен на вход принимать вектор функций, оставь его без аннотаций, пусть компилятор сам разбирается.
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Кстати, надо посмотреть в @code_typed, comprehensions вроде не совсем массивы.
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Им конверт дополнительный нужен. Хотя визуально да, выглядят как массив.
источник