8

因此,对于一个非常小的公式解释器,有人让我编写高尔夫代码,我想做类似的事情

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

允许关键字和它们描述的功能之间的快速转换。不仅这个语法没有解析,而且我尝试过的其他简写语法 ( _ + _, _:Int.+_) 也没有解析。有没有办法将其作为函数速记,或者我注定要完全写出 lambda,从而破坏我的高尔夫成绩。

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

4

1 回答 1

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" -> (_/_)) 
于 2013-09-27T15:58:40.113 回答