如何引用when表达式的未命名的参数?

我有一个表达式如下所示:

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

现在,我不想调用foo.toString()两次,但我也希望这是一个单一的表达式。 有没有一种方便的方式来访问我传递给else表达式的值,比如在语言的其他地方找到的itthis@语法?

我目前正在使用以下解决方法:

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

但是这引入了另一个块,并且比我想要的更不可读。 有更好的解决方案吗?

对于when块,没有指定变量,但是可以使用let()函数来进行类似的行为,这可能比您的解决方法稍好一些,但行为相同。

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