Сделайте пользовательский тип не транслируемым - PullRequest
2 голосов
/ 15 апреля 2020

Скажите, у меня есть

struct Foo
    x::Int
end
bar(f::Foo, val::Int) = f.x + val

Я хочу вещать против этого единственного объекта

foo = Foo(1)
z = bar.(foo, collect(1:10))

, но я получаю MethodError: no method matching length(::Foo).

Как я могу объявить, что Foo не транслируется?

1 Ответ

3 голосов
/ 15 апреля 2020

Вы можете ускорить трансляцию, вернув себя с помощью

import Base.Broadcast.broadcastable
broadcastable(f::Foo) = Ref(f)

См. https://docs.julialang.org/en/v1/base/arrays/#Base .Broadcast.broadcastable

...