Scala:return 集并集的高阶函数

Scala: Higher order function to return the union of sets

我正在研究以下 Scala 高阶函数:

def after(M: Set[Expression], n: String): Set[Set[Expression]] = { M.map((expr: Expression) => aft(expr,n)) }

函数 aft 具有以下签名:

def aft(m: Expression, n: String): Set[Expression]

类型Expression是我创建的抽象class。

我希望方法 after 获取 Expression 的集合 M,对 M 中的每个元素应用 aft,然后 return 的并集结果(即 Set[Expression] 而不是 Set[Set[Expression]])。我认为在这种情况下应该使用高阶函数,但我真的不明白该怎么做,因为我仍然认为自己是 Scala 和函数式编程的新手。

您正在寻找 flatMap 而不是 map:

def after(M: Set[Expression], n: String): Set[Expression] = { M.flatMap((expr: Expression) => aft(expr,n)) }

一般而言,要让任何用户定义的类型都按 Set[A] 的预期行为,需要确保正确实现 hashCodeequals,否则两个对象之间的相等性将使用Object.equals,这通常不是你想要的。

附带说明一下,虽然这是一个可爱的方法,但它不是高阶函数。它不接受函数作为参数,也不是 return 函数。