4 julia
我正在尝试编写一些代码,这就是我收到的错误。
TypeError: in Type, in parameter, expected Type got xyz
Run Code Online (Sandbox Code Playgroud)
谁能向我解释一下理论上什么会导致这种情况发生?这个错误消息对我根本没有帮助。谢谢!
出现此错误的一种方法如下。假设您定义了一个(重要的)类型XYZ:
julia> struct XYZ
x :: String
end
Run Code Online (Sandbox Code Playgroud)
以及这种类型的一个实例:
julia> xyz = XYZ("foo")
XYZ("foo")
Run Code Online (Sandbox Code Playgroud)
您可以使用以下函数获取对象的类型xyz(即XYZ)typeof:
julia> typeof(xyz)
XYZ
Run Code Online (Sandbox Code Playgroud)
XYZ您可以通过相同的方式获取自身的类型:
julia> typeof(XYZ)
DataType
Run Code Online (Sandbox Code Playgroud)
但是,这将为所有类型返回DataType,当您想要分派类型的类型时,这不太有用。对于这些情况,存在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
Run Code Online (Sandbox Code Playgroud)
然而,有一件事你不能做:以这种方式构建本身不是类型的对象的伪类型:
julia> Type{xyz}
ERROR: TypeError: in Type, in parameter, expected Type, got XYZ
Stacktrace:
[1] top-level scope at REPL[3]:1
Run Code Online (Sandbox Code Playgroud)
总之,当您真正想要的是以下之一时,您可能会使用类似Type{xyz}on an object 的东西:xyz
Type{XYZ}引用类型XYZ本身的(伪)类型typeof(xyz)获取对象的类型xyz