Что означает TypeError: в типе, в параметре ожидаемый тип получил значение xyz в Юлии - PullRequest
2 голосов
/ 27 февраля 2020

Я пытаюсь работать над некоторым кодом, и это ошибка, которую я получаю.

TypeError: in Type, in parameter, expected Type got xyz

Может кто-нибудь объяснить мне, что теоретически может вызвать это? Это сообщение об ошибке не помогает мне вообще. Спасибо!

1 Ответ

5 голосов
/ 28 февраля 2020

Один из способов получить эту ошибку заключается в следующем. Предположим, вы определили (нетривиальный) тип 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
...