Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 作为函数文本的运算符_Scala - Fatal编程技术网

Scala 作为函数文本的运算符

Scala 作为函数文本的运算符,scala,Scala,所以对于一个非常小的公式解释程序,有人让我编写高尔夫代码,我想做一些类似的事情 val ops = Map("plus" -> + , "minus"-> -, "times"-> *, "div" -> / ) 允许在关键字和它们描述的函数之间快速转换。不仅这个语法没有解析,而且我尝试的其他速记语法(+,:Int.+)也没有解析。有没有一种方法可以作为函数速记,或者我注定要把lambdas全部写出来,毁掉我的高尔夫成绩 编辑:问题只是整数。我知道重载会使这变得非常

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

  val ops = Map("plus" -> + , "minus"-> -, "times"-> *, "div" -> / )
允许在关键字和它们描述的函数之间快速转换。不仅这个语法没有解析,而且我尝试的其他速记语法(
+
:Int.+
)也没有解析。有没有一种方法可以作为函数速记,或者我注定要把lambdas全部写出来,毁掉我的高尔夫成绩


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

不确定定义一个附加函数会如何影响你的分数。您可以使用以下类似的方法提升操作员:

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

我知道的唯一方法是
val-ops=Map[String,(Int,Int)=>Int](“加”->(u+),“减”->(-)但不会保存太多字符。。。我很好奇更有经验/更聪明的人会提出什么建议。:)@PatrykĆwiek如果OP想要对任何值进行一般性分析,lambda将不会提供帮助,因为此操作是overloaded@AlexIv是的,它是专门的。我根据问题中的
:Int
注释假设一个简单的
(Int,Int)=>Int
就足够了。如果这是一个一般性的问题,那么我就没有主意了。:)我能想到的唯一方法是将
+
-
*
/
定义为对象的类型类,该对象具有
应用
方法和隐式类型类兴趣!在Haskell中,这将是简单的
ops“plus”=(+);ops“times”=(*)
等并不比
val-ops:Map[String,(Int,Int)=>Int]=Map(“plus”->({u+}),“减号”->{{u+},“times”->{{u*},“div”->{u*})
(或者()或者{}大括号)@om nom是的,我开车回家的时候在想。。。方法提升由编译器自动完成,并且实现了它只需要类型签名。