I need to create a procedure to sum a and b (for study purposes).
Variable a can be int or float, variable b can be int or float too.
My code works, but I wonder if there is more simple way to do overloading:
proc sum(a: int, b: int): int = a + b
proc sum(a: int, b: float): float = float(a) + b
proc sum(a: float, b: int): float = a + float(b)
proc sum(a: float, b: float): float = a + b
echo sum(1, 2)
echo sum(1.0, 2)
echo sum(1, 2.0)
echo sum(1.0, 2.0)
Orlean
You can use generics like this: proc sum[T, Y](a: T, b: Y): float = float(a) + float(b)
According to your answer it seems to be available, but it's difficult for me to understand this material...
Could you post how this will be look for my case?
proc sum(a: int, b: int): int = a + b
proc sum(a: int | float, b: int | float): float = float(a) + float(b)
echo sum(1, 2)
echo sum(1.0, 2)
echo sum(1, 2.0)
echo sum(1.0, 2.0)
Your example code is unfortunately misleading, as this would work too:
#proc sum(a: int, b: int): int = a + b
#proc sum(a: int | float, b: int | float): float = float(a) + float(b)
proc sum(a, b: float): float = a + b
echo sum(1, 2)
echo sum(1.0, 2)
echo sum(1, 2.0)
echo sum(1.0, 2.0)
As Nim int literals work everywhere where float numbers are expected, we would have to use variables for the test.