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是的,我开车回家的时候在想。。。方法提升由编译器自动完成,并且实现了它只需要类型签名。