如何在错误消息中显示类型别名而不是参数类型

时间:2015-06-02 05:14:52

标签: julia

我在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)

为什么呢?因为现实世界的例子有时比这个玩具例子复杂得多,而类型别名的一个目的是使参数类型的复杂特定实例易于识别。因此,在错误消息中轻松识别它也会很好。

我尝试了什么?我最好的猜测是错误函数在string上调用DataType函数,以便在错误消息中生成相应的字符串。因此,对我来说,我可以通过多次调度来扩展string函数以专注于我的类型别名,这一点并不明显,所以我几乎不知道从哪里开始。< / p>

1 个答案:

答案 0 :(得分:4)

您需要定义适当的show方法:

import Base.show
show(io::IO, ::Type{MT}) = print(io, "MT")

然后你的例子给出了:

julia> y1 + y2
ERROR: `+` has no method matching +(::MT, ::MT)