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

Julia 如何在错误消息中显示类型别名而不是参数化类型,julia,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}, ::My

我在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
函数来专门处理我的类型别名,因此我几乎不知道从这里开始该怎么做。

您需要定义一个合适的
show
方法:

import Base.show
show(io::IO, ::Type{MT}) = print(io, "MT")
然后,您的示例给出:

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

我认为Julia不可能自己做,因为可能有多个类型别名。我相信你的猜测也是正确的,是的,这似乎是一条死胡同。不过,这并不是一件不合理的事情——我认为Github问题将是一个合适的论坛。我想知道一个替代的
typealias
,或者一个宏
@typealias
是否可以自动完成这些步骤。太棒了。我希望是这样简单的事情。非常感谢!从1.6开始,这将自动发生。