【发布时间】:2015-06-02 19:09:55
【问题描述】:
我在 julia 中构建了一个参数类型:
type MyType{T}
x::T
end
为简单起见,我为Float64 构建了一个类型别名:
typealias MT MyType{Float64}
我现在故意导致涉及MT 的错误。例如:
y1 = MyType(1.0)
y2 = MyType(2.0)
y1 + y2
会抛出一个错误,因为+ 没有为MyType 定义。错误消息说:
`+` has no method matching +(::MyType{Float64}, ::MyType{Float64})
我想说:
`+` has no method matching +(::MT, ::MT)
为什么?因为现实世界的示例有时会比这个玩具示例复杂得多,而类型别名的一个目的是使参数类型的复杂特定实例易于识别。因此,在错误消息中也可以轻松识别它会很好。
我尝试了什么?我最好的猜测是错误函数通过DataType 调用string 函数,以便在错误消息中生成适当的字符串。所以对我来说,我可以通过多次调度扩展 string 函数来专门处理我的类型别名,这对我来说并不明显,所以我几乎不知道从这里去哪里。
【问题讨论】:
-
我认为 Julia 不可能自己做,因为可能有多个类型别名。我相信你的猜测也是正确的,是的,这似乎是一个死胡同。不过,这并不是一件不合理的事情——我认为 Github 问题将是一个合适的论坛。
标签: julia