为什么我应该使用对象与特征依赖关系并将其与mixin一起导入以构建定义?

Jac*_*ski 7 scala sbt

我已经注意到使用模式的人object Dependencies,做import Dependencies._object build在SBT如下:

import sbt._
import Keys._

object Dependencies {
  // dependencies declared as vars
}

object build extends Build {
  // bring Dependencies' vars to scope
  import Dependencies._

  // project definitions
}
Run Code Online (Sandbox Code Playgroud)

最近我发现了另一种具有如下特征的方法:

import sbt._
import Keys._

trait Dependencies {
  // dependencies declared as vars
}

// bring Dependencies' vars to scope by with   
object build extends Build with Dependencies {
  // project definitions
}
Run Code Online (Sandbox Code Playgroud)

我认为特征方法为构建对象提供了更好的命名,因为它读取对象构建是一个内联依赖的构建.

这些方法之间有什么区别(除了可能更好的写入/读取对象)?

我认为这个问题很容易归结为Scala中对象和特征之间的差异,但是由于它缩小为sbt构建定义(我认为不需要那么多的表达性),我想我会在这里要求构建定义常见的模式.

jsu*_*eth 0

两者之间没有语义差异。如果您必须选择一种,我更喜欢这种object Dependencies变体,因为这种变体更适合处理build.sbt文件。