茱莉亚的代表团是什么?

时间:2019-02-20 15:34:40

标签: design-patterns polymorphism julia composition

我经常看到对授权的引用, 或Julia中的委托设计模式。

这是什么?

例如我在

中看到了

1 个答案:

答案 0 :(得分:4)

这是通过合成(而不是继承)实现的多态形式

说一个包装类型,包装AbstractT具体子类型的某些实例 包装器本身应为AbstractT的子类型 (并非nesc总是正确的,但总的来说。)

要添加所有与AbstractT这样的子类型完全相同的方法, 我们想委托这些方法中的某些或全部到包装的对象。 我们通过元编程来做到这一点。 如何执行此操作有一些变体。 但是总的来说,提取是很难的模式,因此人们经常自己编写。

说所有AbstractT子类型都应实现  1arg lengthsizemean

struct WrappedT{T<:AbstractT} <: AbstractT
    backing ::T
    ...
end

for fun in (:(Base.length), :(Base.size), :(Statistics.mean))
    @eval ($fun)(x::WrappedT, args...) = ($fun(x.backing, args...))
end

通常,您不会委派所有方法,因为有些方法您想做不同的事情,那就是最终创建新类型的关键所在。