See for yourself.
@startuml
!definelong with(x)
!define _ x
!enddefinelong
with(a)
note over wrong: a : _
with(b)
note over wrong: b : _
with(a)
note over wrong: a : _
!define _ x
note over right: x : _
!define _ y
note over right: y : _
!define _ x
note over right: x : _
@enduml
Produces:
The second `with(a)` produces a reference to `b`, not only from `_` but it wrongly changes `a`
When the same technique is used without macro substitution the right colum is produced, as would be expected.