从char转换为运算符Kotlin

时间:2018-07-08 19:36:32

标签: kotlin char type-conversion operators

是否有任何方法可以将一个具有'+'值的char转换为+运算符?像这样:

<p>
|</p>

输出:

println(1 charOperator 1);

5 个答案:

答案 0 :(得分:4)

您可以使用以下内容:

fun operatorFromChar(charOperator: Char):(Int, Int)->Int
{
    return when(charOperator)
    {
        '+'->{a,b->a+b}
        '-'->{a,b->a-b}
        '/'->{a,b->a/b}
        '*'->{a,b->a*b}
        else -> throw Exception("That's not a supported operator")
    }
}

并随后致电:

println(operatorFromChar('+').invoke(1,1))

操作员是最后的职能。如果使用操作员的作业返回函数,则可以像调用操作员本身一样调用它,但是它永远不会像直接调用操作员那样“漂亮”。

答案 1 :(得分:0)

您可以做类似的事情

infix fun Int.`_`(that: Int) = this + that 

,对于该角色而言,反引号不是必需的,但对于其他角色,则可能是必需的。然后您可以尝试:

println(2 _ 3) // output: 5
根据评论

更新

我的意思是

val expr = input.split(' ')
when (expr[1])
{
    '+' -> return expr[0].toInt() + expr[2].toInt()
    '-' -> return expr[0].toInt() - expr[2].toInt()
    '*' -> return expr[0].toInt() * expr[2].toInt()
    '/' -> return expr[0].toInt() / expr[2].toInt()
    // add more branches
}

但是,我想知道科特林的语法是否有更好,更棘手的解决方案。

答案 2 :(得分:0)

这是不可能的。也许您应该添加当前的解决方案,还有另一种方法可以帮助您。

这是一个仅使用+-来计算表达式的偷偷摸摸的解决方案:

val exp = "10+44-12+3"

val result = exp.replace("-", "+-").split("+").sumBy { it.toInt() }

答案 3 :(得分:0)

您基本上想要的是UrlFetchApp到操作映射的结果。因此,我决定立即返回结果,而不是lambda。

Char

使用扩展功能可能使(?)的语法更好。您决定。

呼叫站点:

fun Int.doOperation(charOperator: Char, x: Int) = when(charOperator) {
    '+' -> this + x
    '-' -> this - x
    '/' -> this / x
    '*' -> this * x
    else -> throw IllegalArgumentException("Not supported")
}

答案 4 :(得分:0)

您可以使用 beanshell 库中的解释器类 将字符串文本自动转换为结果 例如

interpreter.eval("equal=2*3")
println(interpreter.get("equal").toString().toDouble().toString())

或者可以使用做同样事情的表达式类