Scala语言操作记录

本文深入解析Scala中的柯里化技术,演示如何通过两次调用将双参数函数转换为单参数函数,并探讨了列表操作,包括map、groupBy、mapValues等方法的使用及排序技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文按我自己理解的内容进行叙述,可能不具有普遍性:

概念: 柯里化(currying, 以逻辑学家Haskell Brooks Curry的名字命名)指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程,新的函数返回一个以原有第二个参数作为参数的函数。 在Scala中方法和函数有细微的差别,通常编译器会自动完成方法到函数的转换 。

1、简单来说就是把fun(String x, String y)转为需要两次调用方法执行的操作,第一次传递一个参数然后赋值给一个对象,当第二次传递参数的时候就会执行fun当中的代码。参数应该从左到右依次赋值。

普通函数并不支持柯里化的功能,需要使用scala当中的语法糖进行转换

语法糖: val fun = 函数名 _

参考柯里化过程https://blog.youkuaiyun.com/qq_41851454/article/details/80032321

代码逻辑示例:

def mysum(x:Int)(y:Int): Int = {println(x);x+ y}
// 该方法不能使用def mysum(x:Int, y:Int):Int = {x+y}
// 执行语法糖操作
val f1 = mysum _
// 第一次调用函数
val f2 = f1(1)
println(f2)
// 第二次调用函数
val result = f2(3)
// 打印结果
println("the result is "+result)

2、 语句的说明

val aaa:List[Int] = List(1, 2, 3, 4, 1, 6)
val bb = aaa.map((_,1)).groupBy(_._1).mapValues(_.length).toList.sortBy(-_._2)
val bb = aaa.map((_,1))
//注释:_表示aaa当中的每一个元素
// (_,1)表示组成一个(元素,1)的元组
// 结果:(1, 1) (2, 1) (3, 1) (4, 1) (1, 1) (6, 1)
.groupBy(_._1)
// 表示将元组里面的每个元素的第一个参数进行分组
// 结果:与mapvalues一起
.mapValues(_.length)
// 表示将分组后的元素进行map化
// (1, 2) (2, 1) (3, 1) (4, 1) (6, 1) 
.toList.sortBy(-_._2)
// 将map转换为list元组
// List((1,2), (6,1), (2,1), (3,1), (4,1))
// -_._2表示使用list中每个元素的第二个参数进行排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值