【发布时间】:2014-08-30 16:44:59
【问题描述】:
我正在自学 Scala(来自多年的 Java),我遇到了以下代码,我无法完全理解:
case class Email(subject: String, text: String, sender: String, recipient: String)
type EmailFilter = Email => Boolean
def newMailsForUser(mails: Seq[Email], f: EmailFilter) = mails.filter(f)
val sentByOneOf: Set[String] => EmailFilter =
senders => email => senders.contains(email.sender)
val notSentByAnyOf: Set[String] => EmailFilter =
senders => email => !senders.contains(email.sender)
val minimumSize: Int => EmailFilter = n => email => email.text.size >= n
val maximumSize: Int => EmailFilter = n => email => email.text.size <= n
我觉得难以理解的部分是缺少类型定义的 val:
val sentByOneOf: Set[String] => EmailFilter =
senders => email => senders.contains(email.sender)
我使用 def 创建了相同的函数,我可以理解:
def sentByOne(senders: Set[String], email: Email): (Set[String] => EmailFilter) = {
senders => email => senders.contains(email.sender)
}
以前版本中的类型来自哪里?另外,后一个版本更可取吗?
【问题讨论】:
标签: scala types higher-order-functions