TypeError:在类型中,在参数中,预期类型得到 xyz 在 Julia 中意味着什么

4 julia

我正在尝试编写一些代码,这就是我收到的错误。

TypeError: in Type, in parameter, expected Type got xyz
Run Code Online (Sandbox Code Playgroud)

谁能向我解释一下理论上什么会导致这种情况发生?这个错误消息对我根本没有帮助。谢谢!

ffe*_*tte 6

出现此错误的一种方法如下。假设您定义了一个(重要的)类型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(即XYZtypeof

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