我需要獲取某個類型的無參數版本。例如,可以說我有x = [0.1,0.2,0.3]
。然後typeof(x)==Array{Float64,1}
。我如何製作一個功能(或者是否存在?)parameterless_type(x) == Array
?我需要以通用的形式得到它,以訪問沒有其中的類型參數的構造函數。獲取無參數類型
獲取無參數類型
回答
這似乎在0.5
julia> typeof(a)
Array{Float64,1}
julia> (typeof(a).name.primary)([1 2 3])
1×3 Array{Int64,2}:
1 2 3
編輯工作1:
由於勒託利的評論和ColorTypes.jl
包,0.6的解決方案是:
julia> (typeof(a).name.wrapper)([1 2 3])
1×3 Array{Int64,2}:
1 2 3
編輯2:
鳳陽王說服了我,使用typename
是必要的。特別是,Array{Int}.name
因0.6失敗,因爲Array{Int}
現在是UnionAll
。一個定義在0.5和0.6的工作是
using Compat.TypeUtils: typename
if :wrapper in fieldnames(TypeName)
parameterless_type(T::Type) = typename(T).wrapper
else
parameterless_type(T::Type) = typename(T).primary
end
parameterless_type(x) = parameterless_type(typeof(x))
就這樣,它是
parameterless_type([0.1,0.2,0.3]) == Array
parameterless_type(Array{Int}) == Array
這在0.6上失敗。最好使用庫函數而不是字段訪問。 –
@FenggyangWang這個用例沒有庫函數。因此,我認爲使用上述方法沒有問題。當然,我會將這些代碼包裝在我自己的函數中('ColorTypes.jl'稱爲'basetype'),以便在更新中斷時很容易修復。 – tim
對於至少'.name'字段訪問,應該使用庫函數'typename'。如果你在'VecOrMat {Int}'上試試這個,就可以看到'.name'。 –
的正確方法,既0.5和0.6兼容,是使用Compat
。
julia> using Compat
julia> Compat.TypeUtils.typename(Array{Int, 2})
Array
julia> Compat.TypeUtils.typename(Union{Int, Float64})
ERROR: typename does not apply to unions whose components have different typenames
Stacktrace:
[1] typename(::Union) at ./essentials.jl:119
julia> Compat.TypeUtils.typename(Union{Vector, Matrix})
Array
這將返回一個'TypeName'。有沒有一種方法(除了'eval')在0.6上調用適當的構造函數? – tim
@Tim適當的類型可以使用'.wrapper'從'TypeName'中恢復;儘管這種直接現場訪問在未來很容易破裂。 –
- 1. 獲取Scala類型的類型參數
- 2. 獲取的參數類型的參數
- 3. 如何獲取泛型方法參數的類型參數類?
- 4. 獲取java.util.Map的泛型類型參數
- 5. HAXE獲取函數參數類型
- 6. 獲取函數參數類型
- 7. 獲取參數化類參數的類型?
- 8. 在方法中獲取參數類型
- 9. 如何從javax.lang.model.VariableElement獲取參數類型
- 10. 獲取類型的參數在python
- 11. 如何獲取類型參數?
- 12. 如何從參數化的泛型類型獲取非參數化類型?
- 13. 如何獲取函數的參數類型和返回類型?
- 14. 獲取泛型類的泛型參數的類型名稱
- 15. 如何從類型參數的類型參數,內部scala宏中獲取類型參數?
- 16. 德爾福 - >從無類型參數獲得記錄類型
- 17. 獲取參數類型C99的可變參數函數
- 18. 無法獲取列數據類型
- 19. 如何獲取基類的泛型類型參數?
- 20. Spring 4泛型類,獲取參數化類型
- 21. 如何獲取泛型參數類型的類實例
- 22. 泛型方法從超類獲取參數類型
- 23. 在宏實現中獲取弱類型的類型參數
- 24. 從scala的類型獲取參數化類型?
- 25. 獲取通用類型的參數化類型
- 26. 無效的參數類型
- 27. vb.net無類型參數
- 28. 獲取的參數類型的參數包
- 29. 如何從參數包中獲取所有參數的類型?
- 30. 獲取泛型參數
'typeof(x).name'給了我'Array'。它可能會訣竅,但不會被官方認可的朱莉婭。 –
ColorTypes.jl做到這一點和許多相關的技巧,可能是一個有用的模型? – tholy