julia - 参数中的 TypeError : in Type, 是什么意思,预期类型在 Julia 中得到了 xyz 意思

标签 julia

我正在尝试处理一些代码,这是我遇到的错误。

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,这在想要分派(dispatch)某个类型的类型时不是很有用。对于这些情况,存在 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

关于julia - 参数中的 TypeError : in Type, 是什么意思,预期类型在 Julia 中得到了 xyz 意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60441140/

相关文章:

Julia 数据帧错误: BoundsError attempt to access attempt to access a data frame with X rows at index false

julia - 在 DifferentialEquations.jl 中的 n 次回调后,是否有一种惯用的方法来终止积分

for-loop - Julia - 是否可以在同一个 for 循环中使用进度条和 Threads.@threads?

julia - Julia中二维向量数组的特殊行为

julia - Pluto Notebook 中的可变输出

julia - 更新 Julia 版本而无需重新安装先前版本的软件包

Julia 错误 : LoadError: ArgumentError: Package xxxx does not have ExcelReaders in its dependencies:

loops - 在 Julia 中使用广播表示法的进度条?

julia - 每次启动 Julia 环境时运行 Julia 函数

julia - Julia 中的 `(1)(2)` 和 `x = 1; (x)(2)` 有什么区别?