Проблема с созданием сопутствующего объекта для класса case в Scala

Я провожу исследовательский анализ, используя набор данных Kaggle с помощью Scala. Одна из вещей, которые мне нужно сделать, - это создать сопутствующий объект для класса случая под названием "Налогоплательщик" следующим образом:

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: выведите следующий формат: "$ рабочий класс - $ занятие - $nativeCountry - $ доход"
  • apply: не принимает параметров и возвращает экземпляр класса Taxpayer с Int fields = -1 и String fields = "unknown"

Я пробовал следующее, но это не работает ("ожидаемое определение класса или объекта"):

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)
    }
  }
}

Как я могу определить функцию, которая работает со строками моего набора данных? Заранее спасибо!:)

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" вы делаете что-то другое (вы объявляете параметр типа singleton без значения по умолчанию).

Другие вопросы по тегам