是的,这是一个有趣的问题,但我想学习如何正确使用集合操作,例如 map、reduce 和 fold。
我这样做了:
scala> Range(0,3) map(_=>" ") reduceLeft(_+_)
res15: java.lang.String = " "
使用集合操作生成 n 个空间的更好的惯用方法是什么?
最佳答案
从技术上讲,以下是“收集操作”,我猜,因为 StringOps
在 scala.collection.immutable
包裹:
scala> " " * 3
res1: String = " "
这里发生的事情是
" "
隐式转换为 StringOps
的实例来自 scala.Predef.augmentString
,然后是 *
方法在 StringOps
叫做。更新:我的意思部分是作为一种玩笑,因为这显然不是您所说的“集合操作”的意思——它不是像
map
这样的高阶函数或 reduce
.我肯定会在实际代码中使用我的版本(StringOps
版本),但是如果您想使用高阶函数(出于教育原因、类似问题等),我认为您的版本非常接近惯用语。我个人会使用 until
用于构建范围和 reduce
而不是 reduceLeft
(因为串联是关联的)——也就是说,几乎是 virtualeyes 在他或她的答案中写的。
关于scala - 更好的一个类轮来生成 n 个空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9958222/