홈>
재귀적인 단위없는 요소 유형을 제공하는 함수를 만들려고합니다. 예를 들어 짧게하려면
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
- 답변 # 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
- javascript : 재귀 적 평면의 결과를위한 JS 배열 연결
- 중첩 된 배열을 flatten에 사용하려면 JavaScript의 축소 및 재귀를 사용하십시오.
- typescript : 재귀적인 Async 생성기 기능의 반환 유형
- javascript : 중첩 된 객체 및 출력 배열 병합
- javascript : 재귀 질문 : 각 문자가 배열의 인덱스를 차지하는 배열 만들기
- arrays : Haskell : 변수의 꼬리를 자체 변수로 다시 할당하는 것이 왜 문제가 있습니까?
- python : 글로벌 목록 파이썬에서 경로를 기억하는 재귀 함수
- php : 중첩 된 배열의 "도트 표기법"키를 자식 배열로 확장합니다.
- PHP 재귀 배열 카운팅
내가 생각 해냈다 :
이것은 여전히 완전하지는 않지만 상당히 다양한 것들에서 작동합니다.