【问题标题】:Trouble creating a companion object for a case class in Scala在 Scala 中为案例类创建伴随对象时遇到问题
【发布时间】:2020-06-14 11:00:15
【问题描述】:

我正在使用 a Kaggle dataset 和 Scala 进行一些探索性分析。我要做的一件事是为一个名为“Taxpayer”的案例类创建一个伴随对象,如下所示:

case class Taxpayer(
                age: Int,
                workclass: String,
                education: String,
                educationNum: Int,
                maritalStatus: String,
                occupation: String,
                relationship: String,
                race: String,
                sex: String,
                capitalGain: Int,
                capitalLoss: Int,
                hoursPerWeek: Int,
                nativeCountry: String,
                income: String
              )

鉴于这个案例类,我必须创建一个伴随对象并定义以下函数:

  • printData:打印以下格式“$workclass - $occupation - $nativeCountry - $income”
  • apply:不接受任何参数,并返回具有 Int fields = -1 和 String fields = "unknown" 的 Taxpayer 类的实例

我尝试了以下方法,但它不起作用(“预期的类或对象定义”):

object Taxpayer{


def printData(c: Taxpayer) = {
    println(s"${c.workclass} - ${c.occupation} - ${c.nativeCountry} - ${c.income}")
    def apply(age: Int = -1, workclass: String = "unknown", education: "unknown", educationNum: Int = -1, maritalStatus: "unknown",
               occupation: "unknown", relationship: "unknown", race: "unknown", sex: "unknown", capitalGain: Int = -1,
               capitalLoss: Int = -1, hoursPerWeek: Int = -1, nativeCountry: "unknown", income: "unknown") = {
      new Taxpayer(age, workclass, education, educationNum, maritalStatus, occupation, relationship,
        race, sex, capitalGain, capitalLoss, hoursPerWeek, nativeCountry, income)
    }
  }
}

如何定义一个适用于我的数据集行的函数?先感谢您! :)

【问题讨论】:

    标签: scala class case-class companion-object exploratory


    【解决方案1】:

    试试

    object Taxpayer{
      def printData(c: Taxpayer) = {
        println(s"${c.workclass} - ${c.occupation} - ${c.nativeCountry} - ${c.income}")
        def apply(age: Int = -1, workclass: String = "unknown", education: String = "unknown", educationNum: Int = -1, maritalStatus: String = "unknown",
                  occupation: String = "unknown", relationship: String = "unknown", race: String = "unknown", sex: String = "unknown", capitalGain: Int = -1,
                  capitalLoss: Int = -1, hoursPerWeek: Int = -1, nativeCountry: String = "unknown", income: String = "unknown") = {
          new Taxpayer(age, workclass, education, educationNum, maritalStatus, occupation, relationship,
            race, sex, capitalGain, capitalLoss, hoursPerWeek, nativeCountry, income)
        }
      }
    }
    

    它在 2.13.2 https://scastie.scala-lang.org/3zq3SDzVTOuHtpgC6nyPIA 中编译

    如果你想用默认值声明方法参数,你应该像education: String = "unknown"那样做。当您编写education: "unknown" 时,您会做一些不同的事情(您声明没有默认值的单例类型参数)。

    【讨论】:

    • 嗨 :) 那段代码有效。我现在想要的是能够调用这些函数来处理我的数据集的行。如何在不必创建纳税人的新实例的情况下“打印数据”数据集中的行?谢谢:D
    • @disturbedman 如果您不想创建Taxpayer 的新实例,那么您的方法printData 可能应该有不同的签名。可能它不应该期待Taxpayer,不是吗?如果您有一些具体问题,请随时创建一个新问题(您尝试过什么,具体什么没有奏效)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 2013-06-05
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    相关资源
    最近更新 更多