Scala:Lambda作为函数体

时间:2014-10-08 10:22:16

标签: scala lambda

以下类型的定义可能的实际用例是什么

type Set = Int => Boolean

def union(s: Set, t: Set): Set = { x => (contains(s, x) || contains(t, x)) }
联合体上方的

是一个lambda函数。

1 个答案:

答案 0 :(得分:3)

  
      
  1. lambda作为函数体的实际用例是什么时候
  2.   

了解Higher order functions

  
      
  1. 我们如何调用union函数,
  2.   

Set是一个接受Int并返回布尔值的函数。 Union需要两个Set,并返回第三个Set。所以我们首先需要两个Set实例(两个函数)。

scala> type Set = Int => Boolean
defined type alias Set

scala> def contains(s: Set, x: Int): Boolean = s(x) // I assumed this
contains: (s: Set, x: Int)Boolean

scala> def union(s: Set, t: Set): Set = { x => (contains(s, x) || contains(t, x)) }
union: (s: Set, t: Set)Set

scala> val oneSet: Set = (x: Int) => x == 1
oneSet: Set = <function1>

scala> val twoSet: Set = (x: Int) => x == 2
twoSet: Set = <function1>

scala> val oneUnionTwo: Set = union(oneSet, twoSet)
oneUnionTwo: Set = <function1>

现在我们有了第三个Set,它是oneSettwoSet

的联合
  

x Int将如何作为参数传递

因为oneUnionTwo基本上是一个接受Int的函数。 x是此函数/ Set的唯一参数。您可以通过调用Set oneUnionTwo

来传递它
scala> oneUnionTwo(1)
res0: Boolean = true

scala> oneUnionTwo(2)
res1: Boolean = true

scala> oneUnionTwo(3)
res2: Boolean = false