Size: a a a

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

2020 January 18

АО

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

VM

Viktor Maslov in Язык программирования Julia / Julia programming language
Андрей Оськин
Если пишешь пакет, то не забудь поставить в зависимости
Этому еще предстоит учиться
источник

АО

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

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
pkg> activate <Название пакета>
pkg> add LinearAlgebra
источник

VM

Viktor Maslov in Язык программирования Julia / Julia programming language
Я со структурой проекта потом отдельно вопросы задавать буду))
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
^_^
источник

VM

Viktor Maslov in Язык программирования Julia / Julia programming language
Андрей Оськин
pkg> activate <Название пакета>
pkg> add LinearAlgebra
Спасибо!
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Вопрос такой: если у меня есть некоторая структура, которая является обёрткой над некоторым итератором, как мне проще всего переопределить протокол итерации для новой штуки
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
struct Foo{T}
   v :: Vector{T}
  # other fields
end
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
iterate(foo :: Foo) ... ?
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
можно же по идее так?
iterate(foo :: Foo) return iterate(foo.v) end
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
вроде так можно:
function iterate(foo :: Foo, state)
return iterate(foo.v, state)
end
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Что-нибудь типа

iterate(f::Foo, s = iterate(f.v)) = iterate(f.v, s)
источник

VG

Viktor G. in Язык программирования Julia / Julia programming language
макрос @forward из Lazy.jl
источник

АО

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

Можно один раз сделать руками, а потом уже пользоваться forward
источник

KT

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

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
к примеру, я хочу сделать abstract type Foo end
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
и хочу, чтобы Real <: Foo == true
источник

АО

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

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
А можешь сказать, зачем бы это тебе было нужно? Чтобы Real <: Foo == true?
Просто в Julia иерархия типов такого значения не имеет, как в других языках, всё же в dispatch упирается.

Если у тебя какой-то достаточно широкий метод, который можно считать как в твоих новых типах, так и в старых, то просто не специализируй функции и всё.

abstract type AbstractFoo end

struct Foo{T} <: AbstractFoo
   x::T
end

Base.:*(x::T, y::T) where {T <: AbstractFoo} = T(x.x * y.x)

mypow2(x) = x*x

mypow2(Foo(2)) # Foo{Int64}(4)
mypow2(2) # 4
источник