98得票5回答
使用for-comprehension进行flatMap/Map转换感到困惑

我似乎确实不理解Map和FlatMap。我不明白的是,一个for-comprehension如何是一系列嵌套调用map和flatMap。以下示例来自于Scala函数式编程def bothMatch(pat:String,pat2:String,s:String):Option[Boolean]...

85得票5回答
在 for-comprehension 中使用 List 组合 Option 会根据顺序产生类型不匹配的问题。

为什么在Scala中使用这种结构会导致类型不匹配错误?for (first <- Some(1); second <- List(1,2,3)) yield (first,second) <console>:6: error: type mismatch; foun...

84得票6回答
使用withFilter而不是filter

在应用map,flatmap等函数时,始终使用withFilter比filter更高效吗? 为什么只支持map、 flatmap和foreach?(期望像forall / exists这样的函数也被支持)

43得票3回答
使用Scala的"for"语法与Eithers

据我所知,Scala的"for"语法与Haskell的monadic "do"语法非常相似。在Scala中,“for”语法经常用于List和Option。我想要在处理Either时也使用它,但是默认情况下没有必要的方法。for { foo <- Right(1) bar <...

37得票5回答
Scala中的Future [Option]和for-comprehensions

我有两个返回 Future 的函数。我试图在使用 for-yield 推导式将第一个函数的修改结果传递给另一个函数。 这种方法是有效的: val schoolFuture = for { ud <- userStore.getUserDetails(user.userId) ...

37得票4回答
在for推导式中是否有一种方式声明隐式val?

我有一些嵌套调用flatMap的代码,如下所示:foo.flatMap(implicit f => bar(123).flatMap(b => /* and so on... implicit f is still in scope here.*/ )) 通常我们会写成for ...

35得票4回答
Scala中的方法参数验证,使用for comprehension和monads

我正在尝试验证一个方法的参数是否为空,但我找不到解决方案... 有人可以告诉我如何做吗? 我尝试了类似于这样的东西: def buildNormalCategory(user: User, parent: Category, name: String, description: Stri...

33得票4回答
在Scala的for推导式中使用println

在for循环中,我不能仅仅放置一个打印语句:def prod (m: Int) = { for (a <- 2 to m/(2*3); print (a + " "); b <- (a+1) to m/a; c = (a*b) ...

32得票6回答
获取Scala for / comprehension表达式的去糖部分?

有没有人知道如何在REPL(或编译器)尝试编译之前获取(for/comprehension表达式的Scala部分)去糖化的翻译? 到目前为止,我找到的唯一方法是使用编译器的"-print"标志,但那只会给你完整的Scala翻译...

26得票3回答
Scala中的"<-"用于推导表达式。

我发现Scala总是有一个“自然的解释”来解释任何事情。总是像“哦,但那只是在这个对象上调用一个函数,并且使用这个和那个参数”。从某种意义上说,没有什么是真正的编译器魔法,就像我们从其他语言中知道的那样。 我的问题是关于以下代码中使用的for(i &lt;- 0 to 10) println...