是否有一种方法可以将字符串转换为可以在Kotlin中使用的文字代码?



这可能是一个非常愚蠢的问题,但我正在记录在我的应用程序中作为字符串触发的方法。当提交问题时,我想自动输入字符串的文本作为方法的参数。例句:

方法:

fun assignPot(potType: PotType, ball: DomainBall, action: PotAction) {...}

我想调用method:

assignPot(FOUL(2, BLUE(5), SWITCH))

从字符串:

"FOUL(2, BLUE(5), SWITCH)"

我能想到的唯一解决方法是拆分字符串并创建一个when ->然后函数从字符串中获得实际的类,但我想知道是否有更简洁的方法。

这不是你想要做的。你应该设计你的应用程序,以防止用户提供类似于实际代码的输入。然而,你可以做到这一点。像这样的复杂解析通常使用基于正则表达式的方法。

如您所说,您应该将字符串部分映射到类。如果您的PotType是enum,则可以执行类似 的操作。
val re = Regex("[^A-Za-zs]")
val reNumbers = Regex("[^0-9s]")
// get classes
val classNames = originalString.replace(re, "").split(" ")
// get their constructor numerical arguments
val classArgs = originalString.replace(reNumbers, "").split(" ")

之后可以用when表达式实现映射。您可能会使用一些Any类型的集合。正如您所看到的,这将导致您逐个代码解析代码。简洁解决的方法是实现你自己的脚本编译器/解释器,并在你的应用程序中使用它:)这将在稍后引导您处理安全漏洞等问题。

如果您正在记录有问题的方法调用,并希望在issue提交后立即重复它们,您可能希望以编程方式保存对lambdas的调用,并在收到issue日志时调用它们。

最新更新