我在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>
答案 0 :(得分:4)
您需要定义适当的show
方法:
import Base.show
show(io::IO, ::Type{MT}) = print(io, "MT")
然后你的例子给出了:
julia> y1 + y2
ERROR: `+` has no method matching +(::MT, ::MT)