Ваш код не только очень далек от того, что считается лучшей практикой в Scala с точки зрения именования переменных и классов, но также имеет несоответствия:
Сначала вы показываете фрагмент кода:
// --- WRONG --- //
val Ana = 0
val Mario = 33
val Romero = 11
И затем вы показываете фрагмент кода
// --- WRONG --- //
Attendance((Mario,33),(Romero,12))
Проблема в том, что в этой ситуации (Mario, 33)
означает просто (33, 33)
, потому что Mario
- это переменная, которую вы присвоили 33
.Вместо этого вам следует сделать следующее:
val ana = ("Ana", 0)
val mario = ("Mario", 33)
val romero = ("Romero", 11)
Еще одно несоответствие:
// --- WRONG --- //
case class attendance(List(name,totalDay))
Это не скомпилируется.При написании List(name, totalDay)
вы определяете List
, содержащий два элемента, name
и totalDay
.Эти элементы не определены в вашем примере.
Вместо этого вы хотите:
case class Attendance(attendees: List[(String, Int)])
Что означает attendees: List[(String, Int)]
?
Это означает, что вы определяетепараметр для вашего класса дел Attendance
, и этот параметр называется attendees
и имеет тип List[(String, Int)]
(говорят: " Список кортежей, каждый из которых состоит из строки и целого числа ")
Тогда вы можете использовать это:
val listOfAttendees: List[(String, Int)] = ??? // Not implemented yet
val attendance = Attendance(listOfAttendees)
Но как вы делаете listOfAttendees
?
Ответ filter
:
val allAttendees = List(ana, mario, romero)
val filteredAttendees = allAttendees.filter {
case (name, days) => days > 0
}
Соберите все вместе:
val ana = ("Ana", 0)
val mario = ("Mario", 33)
val romero = ("Romero", 11)
case class Attendance(attendees: List[(String, Int)])
val allAttendees = List(ana, mario, romero)
val filteredAttendees = allAttendees.filter {
case (name, days) => days > 0
}
val attendance = Attendance(filteredAttendees)
Попробуйте!
Надеюсь, это поможет.