You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala:如何创建多个方法并依次应用?函数式实现求解

这问题刚好能用上Scala的偏应用函数和集合高阶操作来解决,我给你拆解一下思路和实现方式:

首先先把基础的定义写出来:

val suffixes = List("1", "2", "3")
def concat(str: String)(tail: String): String = str + tail

第一步:生成你需要的偏应用函数

你的需求是针对列表里的每个元素,生成固定第二个参数的偏应用函数——也就是每个函数都接受一个字符串,返回它加上对应后缀的结果。用map就能轻松实现:

// 对每个suffix,生成偏应用函数:String => String
val concatFuncs = suffixes.map(suffix => concat(_: String)(suffix))

这里的concat(_: String)(suffix)就是偏应用的写法:我们固定了第二个参数suffix,第一个参数用占位符_表示,这样就得到了一个只需要传入初始字符串就能执行的函数。

第二步:依次应用这些函数到测试字符串

接下来要把这些函数按顺序作用在"abc"上,这时候foldLeft是最适合的工具——它会从左到右遍历函数列表,把上一次的结果作为下一次的输入,完美匹配"依次作用"的需求:

val result = concatFuncs.foldLeft("abc")((currentStr, func) => func(currentStr))

println(result) // 输出: abc123

简化写法(可选)

如果你不需要显式保留那些偏应用函数,只是想得到最终结果,还可以把两步合并成一行,直接在foldLeft里调用柯里化的concat,代码更简洁:

val result = suffixes.foldLeft("abc")((current, suffix) => concat(current)(suffix))

这种方式本质上和前面的思路一致,只是把生成偏应用函数的步骤内联到了折叠操作里,同样是纯函数式的实现。

内容的提问来源于stack exchange,提问作者CodingNow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:55:49