不确定此集合上的联合函数如何工作

use*_*254 1 scala scala-collections

我试图理解这种def方法:

def union(a: Set, b: Set): Set = i => a(i) || b(i)
Run Code Online (Sandbox Code Playgroud)

提到的问题是:Scala集函数

这是我的理解:

该方法采用类型为Set的两个参数 - a&b返回一个Set,两者的并集a和b.

这是我特别困惑的地方:Set = i => a(i)|| 双)

返回的Set本身包含Set a&b的'或'.Set'i'是否由隐式for循环填充?

由于'i'是一个Set,为什么它可能是'或一组'集合',这是什么类似于在后台生成的东西:

a(i) || b(i) 
becomes
SetA(Set) || SetB(Set)
Run Code Online (Sandbox Code Playgroud)

dhg*_*dhg 12

也许令人困惑的是语法.我们可以将其重写为:

type Set = (Int => Boolean)

def union(a: Set, b: Set): Set = {
  (i: Int) => a(i) || b(i)
}
Run Code Online (Sandbox Code Playgroud)

所以这可能更容易理清.我们正在定义一个方法union,它接受Sets并返回一个新的Set.在我们的实现,Set只不过是另一种从一个函数名IntBoolean(即功能告诉我们如果参数"中集").

union方法的主体从Intto 创建一个匿名函数Boolean(这是Set我们已经定义的).这个匿名函数接受一个参数i,一个Int,并且true当且仅当i在set a(a(i))OR中时才返回iset b(b(i)).