簡體   English   中英

如何 Map 與 Scala 中的案例 class

[英]How to Map with a case class in Scala

我正在嘗試轉換一個 Map 和我使用 Apply 定義的案例 class。

case class ETLConfig (srcTableName:Option[String] = None, 
                  idCol:Option[String] = None , 
                  orderingCol:Option[String] = None)

object ETLConfig {
      def apply(map: Map[String, String]): ETLConfig =
        ETLConfig(map.get("srcTableName"),map.get("idCol"),map.get("orderCol"))
    }
Error:
command-512604125416347:2: error: too many arguments for method apply: (map: Map[String,String])ETLConfig in object ETLConfig
  def apply(map: Map[String, String]):ETLConfig = ETLConfig(map.get("srcTableName"),map.get("idCol"),map.get("orderCol"))

有人可以指出我在做什么錯嗎?

我也嘗試了以下方法並且正在工作。

val empMap:Map[String, String] = Map("srcTableName" -> "Employee","idCol" -> "EmpId", "orderCol" -> "CreatedOn" )
val empConfig = ETLConfig(dtMap.get("srcTableName"),dtMap.get("idCol"), dtMap.get("orderCol"))
val srcTable = dtConfig.srcTableName.orNull

編輯:由於您使用的是 Databricks,因此您應該在package 單元格中定義您的類和對象。

原答案:

我假設您在 REPL 中執行此操作。 案例 class 及其配套案例 object 需要在同一個文件中。 在通常的 Scala REPL 中,每個命令都算作一個新的“文件”。 這意味着您的ETLConfig object 不是您的案例 class 的伴侶,因此它會影響您的應用方法而不是重載它(因此您不能調用原始方法)。

在官方的 Scala REPL 中,可以使用:paste命令解決這個問題:

scala> :paste
// Entering paste mode (ctrl-D to finish)

case class ETLConfig (srcTableName:Option[String] = None, 
                  idCol:Option[String] = None , 
                  orderingCol:Option[String] = None)

object ETLConfig {
      def apply(map: Map[String, String]): ETLConfig =
        ETLConfig(map.get("srcTableName"),map.get("idCol"),map.get("orderCol"))
    }

// Exiting paste mode, now interpreting.

defined class ETLConfig
defined object ETLConfig

從您的 output 看來,您使用的是不同的 REPL,所以我不知道這是否可行。

暫無
暫無

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

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