Один из способов получить эту ошибку заключается в следующем. Предположим, вы определили (нетривиальный) тип XYZ
:
julia> struct XYZ
x :: String
end
и экземпляр этого типа:
julia> xyz = XYZ("foo")
XYZ("foo")
Вы можете получить тип объекта xyz
(то есть XYZ
), используя функцию typeof
:
julia> typeof(xyz)
XYZ
Вы можете получить сам тип XYZ
таким же образом:
julia> typeof(XYZ)
DataType
, однако, он вернет 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
Однако есть одна вещь, которую вы не можете сделать: создать таким образом псевдотип объекта, который сам не является типом:
julia> Type{xyz}
ERROR: TypeError: in Type, in parameter, expected Type, got XYZ
Stacktrace:
[1] top-level scope at REPL[3]:1
В заключение вы, вероятно, использовали что-то вроде Type{xyz}
для объекта xyz
, когда то, что вы действительно хотели, было одним из следующих:
Type{XYZ}
для обозначения (псевдо) тип самого типа XYZ
typeof(xyz)
для получения типа объекта xyz