|
25 | 25 | return output |
26 | 26 | end |
27 | 27 |
|
28 | | -for (type, base_type, _) in ABSTRACT_QUANTITY_TYPES |
29 | | - @eval Base.convert(::Type{$base_type}, q::$type) = q |
30 | | -end |
31 | | -function Base.convert(::Type{T}, q::UnionAbstractQuantity) where {T<:Number} |
32 | | - @assert iszero(dimension(q)) "$(typeof(q)): $(q) has dimensions! Use `ustrip` instead." |
33 | | - return convert(T, ustrip(q)) |
34 | | -end |
35 | 28 | function Base.promote_rule(::Type{Dimensions{R1}}, ::Type{Dimensions{R2}}) where {R1,R2} |
36 | 29 | return Dimensions{promote_type(R1,R2)} |
37 | 30 | end |
@@ -110,6 +103,21 @@ for (type, _, _) in ABSTRACT_QUANTITY_TYPES |
110 | 103 | end |
111 | 104 | end |
112 | 105 |
|
| 106 | +for (type, base_type, _) in ABSTRACT_QUANTITY_TYPES |
| 107 | + @eval begin |
| 108 | + function (::Type{T})(q::$type) where {T<:Number} |
| 109 | + @assert iszero(dimension(q)) "$(typeof(q)): $(q) has dimensions! Use `ustrip` instead." |
| 110 | + return convert(T, ustrip(q)) |
| 111 | + end |
| 112 | + function Base.convert(::Type{T}, q::$type) where {T<:Number} |
| 113 | + return T(q) |
| 114 | + end |
| 115 | + function Base.convert(::Type{$base_type}, q::$type) |
| 116 | + return q |
| 117 | + end |
| 118 | + end |
| 119 | +end |
| 120 | + |
113 | 121 | """ |
114 | 122 | promote_except_value(q1::UnionAbstractQuantity, q2::UnionAbstractQuantity) |
115 | 123 |
|
@@ -298,9 +306,13 @@ tryrationalize(::Type{R}, x) where {R} = isinteger(x) ? convert(R, round(Int, x) |
298 | 306 | Base.showerror(io::IO, e::DimensionError) = print(io, "DimensionError: ", e.q1, " and ", e.q2, " have incompatible dimensions") |
299 | 307 | Base.showerror(io::IO, e::DimensionError{<:Any,Nothing}) = print(io, "DimensionError: ", e.q1, " is not dimensionless") |
300 | 308 |
|
301 | | -Base.convert(::Type{Q}, q::UnionAbstractQuantity) where {Q<:UnionAbstractQuantity} = q |
302 | | -Base.convert(::Type{Q}, q::UnionAbstractQuantity) where {T,Q<:UnionAbstractQuantity{T}} = new_quantity(Q, convert(T, ustrip(q)), dimension(q)) |
303 | | -Base.convert(::Type{Q}, q::UnionAbstractQuantity) where {T,D,Q<:UnionAbstractQuantity{T,D}} = new_quantity(Q, convert(T, ustrip(q)), convert(D, dimension(q))) |
| 309 | +for (type, _, _) in ABSTRACT_QUANTITY_TYPES |
| 310 | + @eval begin |
| 311 | + Base.convert(::Type{Q}, q::$type) where {Q<:UnionAbstractQuantity} = q |
| 312 | + Base.convert(::Type{Q}, q::$type) where {T,Q<:UnionAbstractQuantity{T}} = new_quantity(Q, convert(T, ustrip(q)), dimension(q)) |
| 313 | + Base.convert(::Type{Q}, q::$type) where {T,D,Q<:UnionAbstractQuantity{T,D}} = new_quantity(Q, convert(T, ustrip(q)), convert(D, dimension(q))) |
| 314 | + end |
| 315 | +end |
304 | 316 |
|
305 | 317 | Base.convert(::Type{D}, d::AbstractDimensions) where {D<:AbstractDimensions} = d |
306 | 318 | Base.convert(::Type{D}, d::AbstractDimensions) where {R,D<:AbstractDimensions{R}} = D(d) |
|
0 commit comments