相关疑难解决方法(0)

如何迭代scala地图?

我有scala地图:

attrs: Map[String , String]
Run Code Online (Sandbox Code Playgroud)

当我尝试迭代地图时;

attrs.foreach { key, value =>     }
Run Code Online (Sandbox Code Playgroud)

以上不起作用.在每次迭代中,我必须知道什么是关键,什么是价值.使用scala语法糖迭代scala map的正确方法是什么?

scala

79
推荐指数
2
解决办法
5万
查看次数

红隼函数式编程设计模式的附加值是什么?(斯卡拉)

我想知道为什么使用Kestrel放弃代码的副作用部分是如此有用.有没有人有这方面的经验?并且可以解释真正的动机以及它如何帮助到底.

虽然我知道Pure函数编程是关于零方效应的,因此可以更好地调试和预测代码.但是对于Kestrel来说,我看不出它真的有帮助吗?

最好,

MM-

design-patterns functional-programming scala

9
推荐指数
1
解决办法
915
查看次数

在Scala中同时打印和返回值的惯用方法

什么是惯用的打印方式(或做任何我需要做的事情)并在Scala中返回值?例如,

Seq(1,2,3)
  .map(_ * 2)
  .xxx(println) // Here I want to print the intermediate sequence
  .foldLeft(0)(_ + _)
Run Code Online (Sandbox Code Playgroud)

我能想到的一种方法是使用隐式但我真的不喜欢自己修补标准库.

注意

在Ruby中我们可以使用 Object#tap

[1,2,3]
  .map { |i| i * 2 }
  .tap { |i| puts i }
  .reduce(0) { |x, i| x += i }
Run Code Online (Sandbox Code Playgroud)

scala

3
推荐指数
1
解决办法
214
查看次数

如何使用我自己的通用地图丰富TraversableOnce?

我试图丰富所有TraversableOnce [String]对象,我无法找出构建迭代器的正确语法.这是我到目前为止:

class Exclaimer[R <: TraversableOnce[String]](val lines:R) {
  import scala.collection.generic.CanBuildFrom
  def exclaim(implicit bf:CanBuildFrom[R,String,R]):R = {
    val b = bf(lines)
    lines.foreach(b += _)
    b.result
  }
}
implicit def WrapExclaimer[R <: TraversableOnce[String]](lines:R) = new Exclaimer(lines)
Run Code Online (Sandbox Code Playgroud)

它适用于集合(即它返回与我给它相同的类的集合),但它不适用于迭代器,因为它Cannot construct a collection of type Iterator[java.lang.String] with elements of type String based on a collection of type Iterator[java.lang.String].我该如何解决?我正在使用Scala 2.9(编辑:我错误地写了2.8).

这是一些示例输出:

scala> List("a","b","c").exclaim
res5: List[java.lang.String] = List(a, b, c)

scala> Vector("a","b","c").exclaim
res6: scala.collection.immutable.Vector[java.lang.String] = Vector(a, b, c)

scala> List("a","b","c").iterator.exclaim
<console>:10: error: Cannot construct a collection …
Run Code Online (Sandbox Code Playgroud)

scala

1
推荐指数
1
解决办法
561
查看次数