¿Cómo puedo hacer reference a un argumento sin nombre de una expresión when?

Tengo una expresión when que se ve así:

when(foo.toString()){ "" ->'A' "HELLO" ->'B' "GOODBYE"->'C' else ->foo.toString()[0]//problematic method call duplication } 

Ahora, no quiero llamar a foo.toString() dos veces, pero también quiero que siga siendo una sola expresión. ¿Hay alguna manera conveniente para que acceda al valor que pasé en la expresión when en su bloque else, como la syntax it or this@ encuentra en otro lugar del lenguaje?

Actualmente estoy usando la siguiente solución:

 with(foo.toString()){ when(this){ "" ->'A' "HELLO" ->'B' "GOODBYE"->'C' else ->this[0] } } 

Pero esto introduce otro bloque y es less legible de lo que me gustaría. ¿Hay una mejor solución?

    Para el bloque when no hay una variable especificada, pero puede usar la function let() para un comportamiento similar que podría ser un poco mejor que su solución, pero que se comporta de la misma manera.

     foo.toString().let{ when(it){ "" ->'A' "HELLO" ->'B' "GOODBYE"->'C' else ->it[0] } }