scala - 在 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 必须知道匿名函数的定义在哪里开始和结束。您在 in 中使用括号minus2
告诉 Scala 这_ - _
是完整的函数。编译器当然不高兴,因为您缺少参数。
推荐阅读
- web - 无标记 WebAR 库
- django - 调用者在使用 GMail API 时没有权限错误
- ruby-on-rails - 对 .erb 文件中的数据进行排序
- qt - TypeError:值为空,无法转换为对象
- java - 错误:(19、21)java:不兼容的类型:java.lang.Object 无法转换为项目
- javascript - 如何从地图外部将对象拖放到 Mapbox 地图中?
- django - 无法通过带有脆表的外键上传数据
- unit-testing - 使用 ServiceBusTrigger 对 Azure 函数进行单元和集成测试
- node.js - JS中的指针?
- sockets - 如何停止在 kotlin 中重新连接以前的套接字对象?