@@ -4,6 +4,12 @@ const DEFAULT_VALUE_TYPE = Float64
4
4
abstract type AbstractQuantity{T,R} end
5
5
abstract type AbstractDimensions{R} end
6
6
7
+ constructor_of (:: Type{D} ) where {D<: AbstractDimensions } = D
8
+ constructor_of (:: Type{D} ) where {R,D<: AbstractDimensions{R} } = D. name. wrapper
9
+ constructor_of (:: Type{Q} ) where {Q<: AbstractQuantity } = Q
10
+ constructor_of (:: Type{Q} ) where {T,Q<: AbstractQuantity{T} } = Q. body. name. wrapper
11
+ constructor_of (:: Type{Q} ) where {T,R,Q<: AbstractQuantity{T,R} } = Q. name. wrapper
12
+
7
13
"""
8
14
Dimensions
9
15
@@ -29,31 +35,15 @@ struct Dimensions{R<:Real} <: AbstractDimensions{R}
29
35
temperature:: R
30
36
luminosity:: R
31
37
amount:: R
32
-
33
- function Dimensions (length:: _R ,
34
- mass:: _R ,
35
- time:: _R ,
36
- current:: _R ,
37
- temperature:: _R ,
38
- luminosity:: _R ,
39
- amount:: _R ) where {_R<: Real }
40
- new {_R} (length, mass, time, current, temperature, luminosity, amount)
41
- end
42
- Dimensions (; kws... ) = Dimensions (DEFAULT_DIM_TYPE; kws... )
43
- Dimensions (:: Type{_R} ; kws... ) where {_R} = Dimensions (
44
- tryrationalize (_R, get (kws, :length , zero (_R))),
45
- tryrationalize (_R, get (kws, :mass , zero (_R))),
46
- tryrationalize (_R, get (kws, :time , zero (_R))),
47
- tryrationalize (_R, get (kws, :current , zero (_R))),
48
- tryrationalize (_R, get (kws, :temperature , zero (_R))),
49
- tryrationalize (_R, get (kws, :luminosity , zero (_R))),
50
- tryrationalize (_R, get (kws, :amount , zero (_R))),
51
- )
52
- Dimensions {_R} (; kws... ) where {_R} = Dimensions (_R; kws... )
53
- Dimensions {_R} (args... ) where {_R} = Dimensions (Base. Fix1 (convert, _R).(args). .. )
54
- Dimensions {_R} (d:: Dimensions ) where {_R} = Dimensions {_R} (d. length, d. mass, d. time, d. current, d. temperature, d. luminosity, d. amount)
55
38
end
56
39
40
+ (:: Type{D} )(:: Type{R} ; kws... ) where {R,D<: AbstractDimensions } = D {R} ((tryrationalize (R, get (kws, k, zero (R))) for k in fieldnames (D)). .. )
41
+ (:: Type{D} )(; kws... ) where {D<: AbstractDimensions } = D (DEFAULT_DIM_TYPE; kws... )
42
+
43
+ (:: Type{D} )(args... ) where {R,D<: AbstractDimensions{R} } = constructor_of (D)(Base. Fix1 (convert, R).(args). .. )
44
+ (:: Type{D} )(; kws... ) where {R,D<: AbstractDimensions{R} } = constructor_of (D)(R; kws... )
45
+ (:: Type{D} )(d:: AbstractDimensions ) where {R,D<: AbstractDimensions{R} } = D ((getfield (d, k) for k in fieldnames (D)). .. )
46
+
57
47
58
48
"""
59
49
Quantity{T}
0 commit comments