是否有任何方法可以将一个具有'+'值的char转换为+运算符?像这样:
<p>
|</p>
输出:
println(1 charOperator 1);
答案 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())
或者可以使用做同样事情的表达式类