我正在编写一些代码,但是出现了以下错误。
TypeError: in Type, in parameter, expected Type got xyz
有人能解释一下理论上会导致这种情况发生的原因吗? 这个错误信息实在没有帮助。 谢谢!
TypeError: in Type, in parameter, expected Type got xyz
有人能解释一下理论上会导致这种情况发生的原因吗? 这个错误信息实在没有帮助。 谢谢!
XYZ
:julia> struct XYZ
x :: String
end
和该类型的一个实例:
julia> xyz = XYZ("foo")
XYZ("foo")
typeof
函数获取对象 xyz
的类型(即 XYZ
):julia> typeof(xyz)
XYZ
XYZ
的类型本身:julia> typeof(XYZ)
DataType
DataType
,当想要根据类型分配时,这并不是很有用。对于这些情况,存在Type
"singleton type"。我认为我也看到它被称为“伪类型”,我觉得很容易理解:一切都像类型XYZ
本身是Type{XYZ}
类型一样工作:julia> XYZ isa Type{XYZ}
true
julia> f(::Type{XYZ}) = 42
f (generic function with 1 method)
julia> f(XYZ)
42
julia> Type{xyz}
ERROR: TypeError: in Type, in parameter, expected Type, got XYZ
Stacktrace:
[1] top-level scope at REPL[3]:1
总之,你可能在一个对象xyz
上使用了类似于Type{xyz}
的东西,但实际上你想要的是以下之一:
Type{XYZ}
来引用类型XYZ
本身的(伪)类型typeof(xyz)
来获取对象xyz
的类型当我错误地定义NamedTuples
的返回类型时,我遇到了非常相似的错误。
正确的方法是:
function fun(arg1::Int64, arg2::Float64)::NamedTuple{(:s1,:s2), Tuple{Int64, Float64}}
return (s1=arg1, s2=arg2)
end
julia> typeof(fun(1, 2.))
NamedTuple{(:s1, :s2), Tuple{Int64, Float64}}