Есть лучший способ сделать это? - PullRequest
0 голосов
/ 19 февраля 2011

так что у меня есть этот кусок xml-кода

<schedule>
  <teacher name="Charles Xavier">
    <activities>
      <activity init="7:00" end="7:50" alias="1st period">
        <days>
          <monday></monday>
          <tuesday>room 102</tuesday>
          <wednesday></wednesday>
          <thursday></thursday>
          <friday>room 101</friday>
        </days>
      </activity>
      <activity init="8:00" end="8:50" alias="2nd period">
        <days>
          <monday></monday>
          <tuesday></tuesday>
          <wednesday>room 101</wednesday>
          <thursday></thursday>
          <friday>room 103</friday>
        </days>
      </activity>
    </activities>
  </teacher>
  <teacher name="Moira McTaggert">
    <activities>
      <activity init="7:00" end="7:50" alias="1st period">
        <days>
          <monday></monday>
          <tuesday>room 102</tuesday>
          <wednesday>room 102</wednesday>
          <thursday>room 104</thursday>
          <friday>room 101</friday>
        </days>
      </activity>
      <activity init="8:00" end="8:50" alias="2nd period">
        <days>
          <monday>room 102</monday>
          <tuesday>room 102</tuesday>
          <wednesday>room 103</wednesday>
          <thursday>room 104</thursday>
          <friday>room 103</friday>
        </days>
      </activity>
    </activities>
  </teacher>
</schedule>

и scala-код до сих пор

object WeekDay extends Enumeration("Monday", "Tuesday", "Wednesday", "Thursday", "Friday") {
  type WeekDay = Value
  val Monday, Tuesday, Wednesday, Thursday, Friday = Value
}

class Teacher {
  var name: String = _
  var activities: ListBuffer[Activity] = _
}

class Activity {
  var init: String = _
  var end: String = _
  var alias: String = _
  var days: List[Day] = List(new Day(WeekDay.Monday), new Day(WeekDay.Tuesday), new Day(WeekDay.Wednesday),
    new Day(WeekDay.Thursday), new Day(WeekDay.Friday))
}

class Day(val day: WeekDay) {
  var room: String = _     
}

я думаю, что этот способ кажется очень "обязательным", может быть, это больше scala-кода?

В конце концов, что я пытаюсь сделать, это метод (см. Ниже), подобный этому, поэтому любые намеки на лучший способ решения этой проблемы будут оценены.

var overlappedRooms = teachers.getOverlappedRooms("7:00", WeekDay.Tuesday)

это должно датьнам некоторая информация о том, что комната 102 Чарльза Ксавье перекрыта комнатой Мойры 102

Примечание.это всего лишь учебный проект.:)

1 Ответ

0 голосов
/ 23 февраля 2011

Многие сторонники Scala стараются избегать изменчивых объектов, хотя некоторые идут за борт ИМХО.Вы можете попробовать что-то вроде этого:

class Teacher(val name:String)

class Activity(
  val init:String,
  val end:String,
  val alias:String,
  val days:List[Day])

type Roster: Map[Teacher, List[Activity]]

Примечание. Я переместил списки с Учителя, так как на самом деле это не собственность учителя.Вы могли бы рассмотреть новый класс для этого.Возможно, активность нужно рассматривать отдельно от тех дней, когда она включена.Я не уверен, почему в вашем дневном классе есть «комната».Я подозреваю, что вашему объектному моделированию здесь нужна помощь.

...