【问题标题】:Is there a better way to do this?有一个更好的方法吗?
【发布时间】:2011-06-30 11:32:40
【问题描述】:

所以我有这段 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)

这应该给我们一些信息,说明 Charles xavier 的 102 房间与 Moira 的 102 房间重叠

注意。这只是一个学习目的项目。 :)

【问题讨论】:

    标签: scala-2.8


    【解决方案1】:

    许多 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]]
    

    请注意,我已将排班从教师中移出,因为它实际上并不是教师的财产。您可能会考虑为它开设一个新课程。可能活动也需要与它所在的日子分开考虑。我不确定为什么您的 Day 课程中有“空间”。我怀疑您的对象建模在这里需要一些帮助。

    【讨论】:

    • 首先感谢您的回复,我肯定会把活动从老师那里移走,关于一天我试图对我在我的 xml 中的内容进行建模的“房间”,例如,任何给定的day 有一个房间供学生上课,这就是我在 Day 班有一个“房间”的原因
    猜你喜欢
    • 2013-05-03
    • 1970-01-01
    • 2021-01-03
    • 2023-01-31
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    相关资源
    最近更新 更多