>

재귀적인 단위없는 요소 유형을 제공하는 함수를 만들려고합니다. 예를 들어 짧게하려면 ruet 라고하겠습니다. , 갖고 싶습니다 :

A = zeros(5,5)
reut(A) == Float64
using Unitful
A = zeros(5,5)*1u"kg"
reut(A) == Float64
AA = [zeros(5,5) for i in 1:5]
reut(AA) == Array{Float64,2}
AofA = [copy(A) for i in 1:5]
reut(AofA) == Array{Float64,2}
using StaticArrays
AofSA = [@SVector [2.0,3.0] for i in 1:5]
reut(AofSA) == SVector{2,Float64}
AofuSA = [@SVector [2.0u"kg",3.0u"kg"] for i in 1:5]
reut(AofuSA) == SVector{2,Float64}

따라서 기본적으로 단위를 제거하지만 배열이 될 수있는 올바른 요소 유형을 반환합니다. 어려운 배열 부분입니다. 재귀를 할 수 있습니다 :

recursive_eltype(a) = recursive_eltype(eltype(a))
recursive_eltype{T<:Number}(a::Type{T}) = eltype(a)

그리고 단위없는 요소 유형을 얻으십시오 :

uEltype = recursive_eltype(u)
uEltypeNoUnits = typeof(one(uEltype))

그러나 이것은 항상 숫자 유형이며 배열의 배열 일 때 배열 유형을 다시 얻는 좋은 방법을 찾지 못하는 것 같습니다.이 방법은 Float64 를 반환합니다.  위의 모든 예에서. 정적 배열을 디스패치하고 similar_type 를 사용하는지 궁금합니다.  여기에 필요합니다.

가능한 경우 Unitful.jl에 대한 요구 사항이없는 솔루션을 원합니다. one(u) 를 통해 숫자에 대한 단위없는 유형을 얻는 것은 가능합니다 그래서 이것이 가능해야한다고 생각합니다.

(일부 관련된 Julia 문제 : https://github.com/JuliaLang/julia/issues/22216 )


  • 답변 # 1

    내가 생각 해냈다 :

    Base.@pure recursive_unitless_eltype(a) = recursive_unitless_eltype(eltype(a))
    Base.@pure recursive_unitless_eltype{T<:StaticArray}(a::Type{T}) = similar_type(a,recursive_unitless_eltype(eltype(a)))
    Base.@pure recursive_unitless_eltype{T<:Array}(a::Type{T}) = Array{recursive_unitless_eltype(eltype(a)),ndims(a)}
    Base.@pure recursive_unitless_eltype{T<:Number}(a::Type{T}) = typeof(one(eltype(a)))
    
    

    이것은 여전히 ​​완전하지는 않지만 상당히 다양한 것들에서 작동합니다.

  • 답변 # 2

    줄리아 버전 0.6.2 사용 (확실히 이식성이없는 코드) :

    function _reut(T)
        try
            T.name == Quantity.body.body.body.name && return _reut(T.parameters[1])
            getfield(T.name.module, T.name.name){_reut.(collect(T.parameters))...}
        catch
            T
        end
    end
    reut(T) = _reut(eltype(T))
    
    

    그리고 문제의 시험은 통과합니다. 여전히 유추 할 수는 없지만 eval 를 대체   getfield(Module,Symbol) 와 함께 . 이 질문은 어디서 얻습니까?

  • 이전 javascript - Bootstrap 4 last version 캐러 설 버튼이 작동하지 않습니다
  • 다음 java - 여러 객체 트랜잭션에 대한 교착 상태를 피하는 가장 좋은 방법은 무엇입니까?