【发布时间】:2016-02-26 09:02:20
【问题描述】:
免责声明:我是 Scala 新手。
我想传递一个带有默认参数的函数,就好像它的类型没有默认参数一样
import scala.util.hashing.MurmurHash3
type Record = Map[String, String]
type Dataset = Seq[Record]
def dropDuplicates(dataset: Dataset, keyF: Record => Any = recordHash) : Dataset = {
// keep only distinct records as defined by the key function
// removed method body for simplicity
return dataset
}
def recordHash(record: Record, attributes: Option[Seq[String]] = None) : Int = {
val values : Seq[String] = attributes
.getOrElse(record.keys.toSeq.sorted)
.map(attr => record(attr))
return MurmurHash3.seqHash(values)
}
这是我在编译时遇到的错误:
error: type mismatch;
[ant:scalac] found : (Record, Option[Seq[String]]) => Int
[ant:scalac] required: Record => Any
[ant:scalac] def dropDuplicates(dataset: Dataset, keyF: Record => Any = recordHash) : Dataset = {
直觉上,当没有提供默认参数attributes 时,我认为recordHash 为类型Record => Int。有没有办法将recordHash 视为Record => Int 类型?
【问题讨论】:
-
记住 scala 不需要显式的
return,函数的最后一条语句将被返回。 -
是的,Scala 中首选隐式。我没有太多的python经验,所以我不会猜到。