我在julia中建立了一个参数类型:
type MyType{T}
x::T
end
Run Code Online (Sandbox Code Playgroud)
为了简单起见,我为以下对象构建类型别名Float64:
typealias MT MyType{Float64}
Run Code Online (Sandbox Code Playgroud)
我现在故意造成涉及的错误MT。例如:
y1 = MyType(1.0)
y2 = MyType(2.0)
y1 + y2
Run Code Online (Sandbox Code Playgroud)
会引发错误,因为+未为定义MyType。错误消息显示:
`+` has no method matching +(::MyType{Float64}, ::MyType{Float64})
Run Code Online (Sandbox Code Playgroud)
我想说:
`+` has no method matching +(::MT, ::MT)
Run Code Online (Sandbox Code Playgroud)
为什么?因为现实世界中的示例有时会比这个玩具示例复杂得多,并且类型别名的一个目的是使参数类型的复杂特定实例易于识别。因此,也很容易使它在错误消息中易于识别。
我尝试了什么?我最好的猜测是,错误函数string通过a 调用该函数DataType,以便在错误消息中生成适当的字符串。因此,对于我来说,可以string通过多次分派扩展功能以专门研究类型别名不是很明显,因此我对从何处去很困惑。
您需要定义适当的show方法:
import Base.show
show(io::IO, ::Type{MT}) = print(io, "MT")
Run Code Online (Sandbox Code Playgroud)
然后,您的示例给出:
julia> y1 + y2
ERROR: `+` has no method matching +(::MT, ::MT)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |