Scala Traits - 如何实现方法

Scala Traits - how to implement method

如何从下面 Employee 对象内部的 Person 特征(接口)正确扩展和实现方法 sendEmail 以便 main 执行:

trait Person {
  var name:String
  var gender:Char
  def sendEmail(subject:String, body:String)

}

object Employee extends Person {
  def main(args: Array[String]): Unit = {
    println("Hello")
    sendEmail("a", "b")

    def sendEmail(subject:String, body:String): Unit = {
      println("subject" + body)
    }

  }
}

该方法需要是对象的成员,而不是另一个函数 (main) 中的函数。尝试:

object Employee extends Person {

  def sendEmail(subject:String, body:String): Unit = {
    println("subject" + body)
  }
  def main(args: Array[String]): Unit = {
    println("Hello")
    sendEmail("a", "b")
  }
}

您需要实现特征 Person 中声明的所有成员和方法。此外,假设您有多个员工,class(或 case class)可能比 object:

更合适
trait Person {
  val name: String
  val gender: Char
  def sendEmail(subject: String, body: String): Unit
}

class Employee(val name: String, val gender: Char) extends Person {
  def sendEmail(subject: String, body: String): Unit =
    println(s"subject: $subject\n   body: $body")
}

object ListEmployees {
  def main(args: Array[String]) {
    val emp1 = new Employee("Dave", 'M')
    val emp2 = new Employee("Jenn", 'F')

    emp1.sendEmail("yo", "yo yo yo")
    emp2.sendEmail("boo", "boo boo boo")
  }
}

ListEmployees.main(Array())
// subject: yo
//    body: yo yo yo
// subject: boo
//    body: boo boo boo