Event:play predates pseudomethods by some years, so it did not take future programming interface developments into account.
Here, the event being played is used, meaning that it becomes the current environment. In the next line, the play function is evaluated, without passing the environment as an argument, because the play function already has access to the currentEnvironment – hence (at that time, without any anticipation of pseudomethods that were some years in the future), the argument was redundant and omitted.
You could make a case that the redundancy would be desirable now, because we have pseudomethods and play could now mimic that interface.
Pseudomethods access outside environment variables by James McCartney’s design. But play does not.
So, play is and always will be not just a pseudomethod, because it has a special purpose and a distinct implementation. That cannot change without breaking events’ base functionality. Hence play cannot be truly compatible with pseudomethods and probably shouldn’t pretend to be.
Oh ok, I remember now. Events hardcoded into a pattern don’t just yield directly, so the parent values don’t go through.
When evaluating an event stream, there’s always an “event in progress.” So, what happens if the pattern puts a few values into the event-in-progress, and then something else returns a hardcoded event?
If we just go with the hardcoded event, then you lose all the other items already put in… that’s not good. So in this case we copy values from the hardcoded event into the event-in-progress… but we copy only from the top layer, not recursively through parent and proto. So it uses the parent from the event prototype passed into play.
Sorry that I had forgotten this.
Have a look at Event.addEventType. This can save a parent event in a global collection, associated with an event type name. So you would specify the play function and parent here, and then recall them both by type: \myEvent in an event, or \type, \myEvent in a Pbind. This should be better than trying to manage it yourself.