【发布时间】:2015-01-07 02:52:16
【问题描述】:
我正在使用 scala 2.10。我对 scala 仍然(非常)陌生,我无法理解为什么我不能访问 trait Printer[T] 的 print 方法内的 Person 案例类的 name 字段。
这是示例代码:
它打印出来
Person(Mark)
Person(Will)
// Model
abstract class BaseModel[T] {
def all: List[T]
}
case class Person(name: String)
object Person extends BaseModel[Person] {
val people = Set(Person("Mark"), Person("Will"))
def all = people.toList.sortBy(_.name)
}
// Controller
trait Printer[T] {
val model: BaseModel[T]
def print = model.all.foreach { p =>
// p.name gives error "value name is not a member of type parameter T"
println(p)
}
}
object PersonPrinter extends Printer[Person] {
val model = Person
}
// Call
object MyApp extends App {
PersonPrinter.print
}
【问题讨论】:
-
p是无约束的T,而不是Person。你还没有说T有一个name。 -
这种情况下怎么能说是人呢?
-
把
print方法放到PersonPrinter中。