JuliaDynamics / Agents.jl

Agent-based modeling framework in Julia
https://juliadynamics.github.io/Agents.jl/stable/
MIT License
734 stars 119 forks source link

[FR] make the `@agent` macro define pretty printing as well #965

Open Datseris opened 8 months ago

Datseris commented 8 months ago

Currently we have:

@agent struct SchellingAgent(GridAgent{2})
    mood::Bool # whether the agent is happy in its position
    group::Int # The group of the agent, determines mood as it interacts with neighbors
end

a = SchellingAgent(1, (1,1), true, 1)

which prints

SchellingAgent(1, (1, 1), true, 1)

wouldn't it be nice to have pretty printing by default, so that each field is printed in 1 line, along with its name, its type, and then = value ? I am sure this shouldn't be too difficult to do...?

Datseris commented 8 months ago

Actually, we don't this at the macro level. We can define Base.show(..., a::AbstractAgent) and just loop over fields and print them. In this function we can also handle properly the @multiagent created types.