以下是代码:
def filterAcc(p: Tweet => Boolean, acc: TweetSet): TweetSet = {
foreach(tweet =>
if(p(elem)) acc.incl(elem)
else acc.incl(elem))
acc
}
def foreach(f: Tweet => Unit): Unit = {
f(elem)
left.foreach(f)
right.foreach(f)
}
def incl(x: Tweet): TweetSet = {
if (x.text < elem.text) new NonEmpty(elem, left.incl(x), right)
else if (elem.text < x.text) new NonEmpty(elem, left, right.incl(x))
else this
}
foreach
需要f
,返回Unit
incl
会返回TweetSet
我传入filterAcc
的函数似乎返回TweetSet
,因为if和else调用incl
中的最后一行。是这样的情况,即使一个值显示为返回Unit
的函数的最后一行,它也只是不会返回该值?对不起,如果这是一个基本问题,我是一个全新的程序员。
答案 0 :(得分:6)
这是Unit
的特例。如果将一个返回非Unit类型的函数f
(或值)传递给另一个期望Unit
类型的函数,则会丢弃非Unit值以支持Unit
。
来自Scala spec - 6.26.2 Value Conversions:
价值放弃
如果e具有某种值类型且预期类型为Unit,则通过将e嵌入到术语{e;中来将e转换为期望类型。 ()}。
这对于调用副作用函数的情况非常有用,该函数返回的值不是Unit
,但您并不关心该值是什么(无论出于何种原因)。