首页 > 解决方案 > 在 scala 匿名函数中使用“_”的简短规则让我感到困惑

问题描述

我对三参数函数有两种定义,如下所示:

val minus1: (Int, Int, Int) => Int = _ - _ - _
val minus2: (Int, Int, Int) => Int = (_ - _) - _

减1很好,但减2被报告为非法,这让我很困惑

按照 ComDubh 的指导,我编写了一个新函数,例如:

val minus3 : (Int, Int, Int)=>Int = ((_-_)-_)

为什么这仍然是错误的?这是否意味着我不应该在“_”之间加上任何括号?我有一个更复杂的问题,比如

val func4: Int=>Int = x => if (x>0) 1 else -1
val func5: Int=>Int = if (_>0) 1 else -1

func4很好,但是为什么我不能省略参数名称“x”来将函数重写为func5(编译器将1或-1视为返回值并报告Int(1)不适合Int => Int )。谢谢你的时间

标签: scala

解决方案


您正在创建一个匿名函数。Scala 必须知道匿名函数的定义在哪里开始和结束。您在 in 中使用括号minus2告诉 Scala 这_ - _是完整的函数。编译器当然不高兴,因为您缺少参数。


推荐阅读