如何在scala中创建课程支持for
个关键字?
e.g:
class A(data: String) {
...
}
val a = A("I'm A")
for {
data <- a
} yield {
data
}
由于
答案 0 :(得分:0)
编译器将所有for
理解重写为必要的组成部分:map()
,flatMap()
,withFilter()
,foreach()
。这就是为什么许多Scala语法规则在for
理解中暂停的原因,例如无法以标准方式val x = 2
创建变量,并且无法投入println()
语句。
在您的示例中,这将有效。
class A(data: String) {
def map[B](f: (String) => B) = f(data)
}
val a = new A("I'm A")
for {
data <- a
} yield {
data
} // res0: String = I'm A
但请注意,如果您有多个生成器(<-
是生成器),那么只有最后一个生成器会变成map()
调用。以前的生成器都是flatMap()
个调用。
如果您的for
理解包含if
条件,那么您也需要withFilter()
。
我建议避免for
理解,直到你对他们的工作方式有一个良好的感觉。