Scala 案例 Class
Scala case Class
下面是代码片段:
package caseClassExp
sealed trait Resources {
def fullpath :String
}
case class Folder (name :String ,
path :Option[String] = None) extends Resources {
def fullpath :String = path match {
case Some(p) => List(p, name).mkString("/")
case None => s"./$name"
}
}
case class File (name :String ,
folder :Option[Folder] = None ) extends Resources {
def fullpath :String = folder match {
case Some(f) => List(f.fullpath, name).mkString("/")
case None => s"./$name"
}
}
object caseClass {
def main(agrs:Array[String]):Unit = {
val resources = Seq[Resources] (
File("ex1.Scala",Some(Folder("example",Some("~/Dev"))))
Folder("temp")
Folder("bin",Some("/usr"))
File(".Clouder")
)
resources foreach {
case f :File => println(s"File: ${f.fullpath}")
case f:Folder => println(s"FOlder : ${f.fullpath}")
}
}
}
当我在 main 中调用文件和文件夹方法(定义为 case class)时出现错误,我不确定我做错了什么。
所以你的顺序不正确。
您应该在序列中的每个元素后加上一个逗号。
val resources = Seq[Resources] (
File("ex1.Scala",Some(Folder("example",Some("~/Dev")))),
Folder("temp"),
Folder("bin",Some("/usr")),
File(".Clouder")
)
结果:
File: ~/Dev/example/ex1.Scala
FOlder : ./temp
FOlder : /usr/bin
File: ./.Clouder
所以一切都很好 :) 除了那个逗号
在您的代码中,我的建议是向资源添加类型并仅使用 Seq
来创建序列。代码将更具可读性。
val resources: Seq[Resources] = Seq(
File("ex1.Scala",Some(Folder("example",Some("~/Dev")))),
Folder("temp"),
Folder("bin",Some("/usr")),
File(".Clouder")
)
下面是代码片段:
package caseClassExp
sealed trait Resources {
def fullpath :String
}
case class Folder (name :String ,
path :Option[String] = None) extends Resources {
def fullpath :String = path match {
case Some(p) => List(p, name).mkString("/")
case None => s"./$name"
}
}
case class File (name :String ,
folder :Option[Folder] = None ) extends Resources {
def fullpath :String = folder match {
case Some(f) => List(f.fullpath, name).mkString("/")
case None => s"./$name"
}
}
object caseClass {
def main(agrs:Array[String]):Unit = {
val resources = Seq[Resources] (
File("ex1.Scala",Some(Folder("example",Some("~/Dev"))))
Folder("temp")
Folder("bin",Some("/usr"))
File(".Clouder")
)
resources foreach {
case f :File => println(s"File: ${f.fullpath}")
case f:Folder => println(s"FOlder : ${f.fullpath}")
}
}
}
当我在 main 中调用文件和文件夹方法(定义为 case class)时出现错误,我不确定我做错了什么。
所以你的顺序不正确。
您应该在序列中的每个元素后加上一个逗号。
val resources = Seq[Resources] (
File("ex1.Scala",Some(Folder("example",Some("~/Dev")))),
Folder("temp"),
Folder("bin",Some("/usr")),
File(".Clouder")
)
结果:
File: ~/Dev/example/ex1.Scala
FOlder : ./temp
FOlder : /usr/bin
File: ./.Clouder
所以一切都很好 :) 除了那个逗号
在您的代码中,我的建议是向资源添加类型并仅使用 Seq
来创建序列。代码将更具可读性。
val resources: Seq[Resources] = Seq(
File("ex1.Scala",Some(Folder("example",Some("~/Dev")))),
Folder("temp"),
Folder("bin",Some("/usr")),
File(".Clouder")
)