我有一个简单的类层次结构,它表示一个类似于图形的结构,其中有几个不同类型的顶点使用case类实现:
sealed trait Node
sealed abstract case class Vertex extends Node
case class Arc extends Node
case class VertexType1 (val a:Int) extends Vertex
case class VertexType2 (val b:Int) extends Vertex
Run Code Online (Sandbox Code Playgroud)
这允许我写这样的匹配块:
def test (x: Node) = x match {
case _ : Arc => "got arc"
case _ : Vertex => "got vertex"
}
Run Code Online (Sandbox Code Playgroud)
或者像这样:
def test (x: Node) = x match {
case _ : Arc => "got arc"
case c : Vertex => c match {
case _ …
Run Code Online (Sandbox Code Playgroud) 如何使用SBT 将一些源文件(例如/src/main/html/*.html
)复制到构建输出目录(例如/target/scala-2.11/
),以便文件最终在目标根目录中而不是在classes
子目录中(如果我添加源目录,会发生什么情况unmanagedResourceDirectories
)?
我想从另一个sbt项目引用一个项目,而不创建聚合("root")项目.
我有两个依赖于某些共享代码的项目,但是它们足够独立以便将它们置于聚合("根")项目下并不真正有意义(即我永远不会同时构建这两个项目而且我希望他们在不同的git存储库中,但是我会在处理其中任何一个时更新共享代码).
我目前的解决方案如下:
lazy val core = ProjectRef(file("../Core"), "core")
lazy val console = project.in(file(".")).dependsOn(core)
Run Code Online (Sandbox Code Playgroud)
这工作直到我必须向"核心"项目添加库依赖项,现在我无法构建"控制台"项目.它失败并显示以下消息:
[error] missing or invalid dependency detected while loading class file 'Settings.class'.
[error] Could not access term typesafe in package com,
[error] because it (or its dependencies) are missing. Check your build definition for
[error] missing or conflicting dependencies. (Re-run with `-Ylog-classpath` to see the problematic classpath.)
[error] A full rebuild may help if 'Settings.class' was compiled against an incompatible version of com.
Run Code Online (Sandbox Code Playgroud)
它显然是指核心依赖的缺少的"com.typesafe.config"库.
有没有办法解决这个问题,以便控制台项目编译与核心的依赖?
我试图在Scala中实现一些有效的枚举.我想使用案例类来做到这一点,以便编译器能够检测任何非详尽的模式匹配.
这在基本形式下工作正常,例如:
sealed abstract class HorizontalAlignment
case object Left extends HorizontalAlignment
case object Right extends HorizontalAlignment
case object Center extends HorizontalAlignment
case object AsIs extends HorizontalAlignment
...
def test (x : HorizontalAlignment) =
x match {
case Left => ...
...
}
Run Code Online (Sandbox Code Playgroud)
但是这并不理想,因为案例对象的名称很容易发生冲突:
sealed abstract class HorizontalAlignment
case object Left extends HorizontalAlignment
case object Right extends HorizontalAlignment
case object Center extends HorizontalAlignment
case object AsIs extends HorizontalAlignment
sealed abstract class VerticalAlignment
case object Top extends VerticalAlignment
case object Bottom extends …
Run Code Online (Sandbox Code Playgroud)