Hi all,

I am new to Julia and am experimenting with trying to create compact code. I created the following types:

```
module Types
export Percentage
struct Percentage <: Real
value::Float64
Percentage(x) = x < 0 ? 0 : x > 1 ? 1 : new(round(x, digits = 6))
end
Base.show(io::IO, x::Percentage) = print(io, "$(x.value * 100)%")
Base.convert(::Type{Percentage}, x::Real) = Percentage(x)
Base.convert(::Type{Percentage}, x::Percentage) = x
Base.promote_rule(::Type{T}, ::Type{Percentage}) where T <: Real = Percentage
import Base: +, -, <, >, <=, >=, ==
+(x::Percentage, y::Percentage) = Percentage(x.value + y.value)
-(x::Percentage) = Percentage(-x.value)
-(x::Percentage, y::Percentage) = Percentage(x.value - y.value)
<(x::Percentage, y::Percentage) = x.value < y.value
<=(x::Percentage, y::Percentage) = x.value <= y.value
>(x::Percentage, y::Percentage) = x.value > y.value
>=(x::Percentage, y::Percentage) = x.value >= y.value
==(x::Percentage, y::Percentage) = x.value == y.value
Base.max(x::Percentage, y::Percentage) = Percentage(max(x.value, y.value))
Base.min(x::Percentage, y::Percentage) = Percentage(min(x.value, y.value))
end
abstract type Longevity end
struct Mechanical <: Longevity
health::Percentage
damage_thresholds::Vector{Tuple{Percentage, Float64}}
repair_thresholds::Vector{Tuple{Percentage, Float64}}
end
Mechanical(
health::Real = 1;
damage_thresholds::Vector{Tuple{Percentage,Real}} = Vector(),
repair_thresholds::Vector{Tuple{Percentage,Real}} = Vector(),
) = Mechanical(Percentage(health), damage_thresholds, repair_thresholds)
```

I tried to use the Mechanical constructor with an Int

`Mechanical(1)`

expecting that the int would call the Percentage() constructor and the rest of the parameters would be set to their default values. Instead I get the following error:

```
ERROR: MethodError: no method matching #Mechanical#10(::Array{Any,1}, ::Array{Any,1}, ::Type{Mechanical}, ::Int64)
Closest candidates are:
#Mechanical#10(::Array{Tuple{Percentage,Real},1}, ::Array{Tuple{Percentage,Real},1}, ::Type{Mechanical}, ::Real) at /Users/stef/Programming/Julia Projects/Simulation Cockpit/cockpit/Entities.jl:35
Stacktrace:
[1] Mechanical(::Int64) at /Users/stef/Programming/Julia Projects/Simulation Cockpit/cockpit/Entities.jl:35
[2] top-level scope at none:1
```

I’m completely confused with the suggested constructor since the order of the parameters looks completely out of whack. I guess I’m missing something but I don’t know what to be honest.

Thanks in advance,

Stef