The switch
function implemented for coroutines in the async
package is more strict than the one in base R. In a coroutine,
switch
will always either take one of the given branches or throw
an error, whereas base R switch
will silently return NULL if no
branch matches switch argument. Otherwise, the same conventions
apply as base::switch()
(e.g. empty switch branches fall through;
a character switch may have one unnamed argument as a default.)
goto(branch = NULL)
A character string naming the new branch. If missing or NULL, jumps back to re-evaluate the switch argument.
Coroutine switch
also supports a delimited form of goto
. Within
a branch, goto("other_branch")
will stop executing the present
branch and jump to the named branch. Calling goto()
without
arguments will jump back to re-evaluate the switch expression.
If a goto
appears in a try-finally call, as in:
switch("branch",
branch=tryCatch({...; goto("otherBranch")},
finally={cleanup()}),
otherBranch={...}
)
the finally
clause will be executed before switching to the new branch.