运算符作为函数文字

时间:2013-09-27 14:05:49

标签: scala

因此,对于一个非常小的公式解释者,有人要我打码 - 高尔夫,我想做类似

的事情
  val ops = Map("plus" -> + , "minus"-> -, "times"-> *, "div" -> / )

允许关键字及其描述的功能之间的快速转换。这个语法不仅没有解析,而且我试过的其他简写语法(_ + __:Int.+_)都没有被解析。有没有办法把它作为一种功能简写,或者我注定要完全写出lambdas,破坏我的高尔夫比分。

编辑:问题只是整数。我知道超载会使这更加困难。

1 个答案:

答案 0 :(得分:5)

不确定如何通过定义附加功能来影响您的分数。您可以使用以下内容解除操作员:

def lift(f:(Int,Int)=>Int) = f
val ops = Map("plus" -> lift(_+_), "minus" -> lift(_-_), "times"-> lift(_*_), "div" -> lift(_/_))

如果你想刮掉一些字符:

def  ↑(f:(Int,Int)=>Int) = f
val ops = Map("plus" -> ↑(_+_), "minus" -> ↑(_-_), "times"-> ↑(_*_), "div" -> ↑(_/_))

正如om-nom-nom评论一样,这个明确的解除也可以由编译器完成,同时提供类型签名来强制解除:

val ops: Map[String, (Int,Int) => Int] = Map("plus" -> (_+_), "minus" -> (_-_), "times"->(_*_), "div" -> (_/_))