簡體   English   中英

將帶有默認參數類型的scala函數視為沒有默認參數

[英]Treat scala function with default parameter type as if it did not have default parameters

免責聲明:我是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時,我認為recordHashRecord => Int類型。 有沒有一種方法可以將recordHash視為Record => Int類型?

我無法編譯您的代碼,因為我錯過了一些類型,但是我認為這可以工作。

def dropDuplicates(dataset: Dataset, keyF: Record => Any = recordHash(_)) : Dataset = {
  // keep only distinct records as defined by the key function
}

之所以recordHash(_)是因為recordHash(_)等效於x => recordHash(x) ,這樣, x (函數的輸入)就是Record ,它就是您想要的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM