聲明:我是新來的Scala。使用默認參數類型處理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
類型。有沒有辦法將作爲Record => Int
類型?
記住scala並不需要顯式的'return',函數的最後一個語句將被返回。 –
在Scala中是隱含的。我沒有太多的Python經驗,所以我不會猜到。 –