在Scala中将字符串转换为运算符

Kub*_*ski 0 string scala eval operators evaluate

如何将Scala中的字符串转换为相应的运算符?给定两个整数和字符串"+"我想要添加这两个整数的结果.

Ale*_*nov 5

最后一个问题非常简单:

def applyOperator(x: Int, y: Int, operator: String) = operator match {
  case "+" => x + y
  case "-" => x - y
  ...
}
Run Code Online (Sandbox Code Playgroud)

可以尝试使用Twitter的Eval库或反射,但我不建议使用更简单的解决方案.

对于第一个问题:运算符本身不是值,因此您不能"将字符串转换为运算符".但是你可以接近:将一个字符串转换为一个函数,它将添加(或减去等)其参数:

def stringToOperator(operator: String): (Int, Int) => Int = operator match {
  case "+" => _ + _
  case "-" => _ - _
  ...
}
Run Code Online (Sandbox Code Playgroud)

你甚至可以将它概括一点,不仅仅用于整数:

def stringToOperator[A: Numeric](operator: String): (A, A) => A = operator match { ... }
Run Code Online (Sandbox Code Playgroud)

(这也很明显地适用于第一个答案.)