scala - 运算符作为函数字面量

标签 scala

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

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

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

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

最佳答案

不确定定义附加函数对您的分数有何影响。您可以使用以下方法解除运算符:

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" -> (_/_)) 

关于scala - 运算符作为函数字面量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19052806/

相关文章:

Scala - Seq 的大小和长度有什么区别?

scala - 尝试在 Ubuntu 上运行 sbt。 (错误 : java. lang.NoClassDefFoundError:scala/ScalaObject)

scala - Spark 流序列化错误

scala - 如何合并两个有序的akka​​流以保存顺序

scala - 确保在应用程序中仅确保一个Spark上下文的良好实践

java - 解决Apache Spark中的依赖性问题

Scala:您知道任何高级 Actors 文档/教程吗?

java - 使用 DateTimeFormatter 进行简单的自定义格式设置

scala - 模拟解析器连接的无形 HList 提取器 `~`

generics - scala 有没有办法在没有示例实例的情况下生成通用实例?