It used something that looks to me like an anonymous type, which I don’t know exists:
mutable struct car_stats
distance
time
speed
end
honda_civic = car_stats(25, 40, nothing)
function speed(carstat)
mph = carstat.distance / carstat.time
return(mph)
end
typemaker(speedfunc,civic) = ()->(speedfunc;civic)
d = typemaker(speed,honda_civic)
d.speedfunc(d.civic)
The question is, why would this even work? What is the anonymous function’s return value (speedfunc;civic)? Why a function that returns this thing can be used as if it’s a user defined type (struct)?
An explanation and/or link to the relevant document will be appreciated!
It works by creating a closure which is an anonymous function. Internally, anonymous functions capture the various variables referenced within.
Here even though the anonymous function ()->(speedfunc;civic) simply returns civic (it doesn’t do anything with speedfunc), both variables are still captured (and accessible by dot notation, like structs).
For this example, there is no reason to have the typemaker function which returns an anonymous function. All of the info is already captured in the type car_stats. Instead of calling d.speedfunc(d.civic), just call speed(honda_civic)…
If there is a need for some object to store the speedfunc and the car, as is done by the closure, a better way would be to simply create a tuple (speedfunc,civic), or simply create another type.