gpt4 book ai didi

scala - 如何在Scala中将此map/flatMap转换为for comprehension?

转载 作者:行者123 更新时间:2023-12-03 13:20:11 25 4
gpt4 key购买 nike

如何将此map / flatMap转换为,以进行理解,谢谢。

    def compute2(maybeFoo: Option[Foo]): Option[Int] =
maybeFoo.flatMap { foo =>
foo.bar.flatMap { bar =>
bar.baz.map { baz =>
baz.compute
}
}
}

最佳答案

您的代码可以翻译为:

def compute2(maybeFoo: Option[Foo]): Option[Int] =
for {
foo <- maybeFoo
bar <- foo.bar
baz <- bar.baz
} yield baz.compute


Programming in Scala, Second Edition中的引号:

通常,for表达式的形式为:

for ( seq ) yield expr


在这里,seq是生成器,定义和过滤器的序列,在连续元素之间带有分号。

该表达式包含一个生成器,一个定义和一个过滤器:

for {
p <- persons // a generator
n = p.name // a definition
if (n startsWith "To") // a filter
} yield n


用一个生成器翻译表达式

首先,假设您有一个简单的表达方式:

for (x <- expr1) yield expr2


其中x是变量。这样的表达被翻译成:

expr1.map(x => expr2)


以生成器和过滤器开头的表达式进行翻译

现在,考虑将领先的生成器与一些
其他元素。用于表达的形式:

for (x <- expr1 if expr2) yield expr3


转换为:

expr1 withFilter (x => expr2) map (x => expr3)


从两个生成器开始的表达式的翻译

下一个案例处理以两个生成器开头的表达式,如下所示:

for (x <- expr1; y <- expr2) yield expr3


上面的for表达式转换为flatMap的应用程序:

expr1.flatMap(x => for (y <- expr2) yield expr3)

关于scala - 如何在Scala中将此map/flatMap转换为for comprehension?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12792595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com