我是Scala的新手,并且我无法理解它们之间的区别:
libraryDependencies ++= Seq(...)
和
libraryDependencies += ...
答案 0 :(得分:15)
是+= dep
或++= Seq(dep, dep2, dep3)
:"Of course, you can also use ++= to add a list of (read: multiple) dependencies all at once"。
请+
查看++
(“追加项目”)和<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ExcludeFromPackageFiles Include="bin\IBM.Data.DB2.dll">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
</Project>
(“附加序列”)运算符。
答案 1 :(得分:7)
请参阅Appending to previous values: += and ++=:
使用
:=
进行分配是最简单的转换,但键也有其他方法。如果T
中的SettingKey[T]
是序列,即键的值类型是序列,则可以附加到序列而不是替换序列。
+=
会在序列中添加一个元素。++=
将连接另一个序列。例如,键
sourceDirectories in Compile
的值为Seq[File]
。
答案 2 :(得分:2)
将此问题解决为一个更简单的问题的一种方法是分离两个部分。
首先,有...=
部分。您可能熟悉Java和其他语言的这种语法,但它在左右操作数上执行...
运算符,并将其存储回左操作数 - 在这种情况下,它将其存储回libraryDependencies。
其次,可以选择++
或+
。如果您查看Seq Scaladoc,那么您将找到这两个运算符。这里的区别在于:
+
在左侧使用一个元素,并将其添加到序列中,然后返回一个新序列。++
在左侧显示一个序列,在右侧显示一个序列,并返回两者的新序列。在实践中,这意味着您将从两者中获得不同的结果。
List(1, 2, 3) ++ List(4, 5, 6)
将返回List(1, 2, 3, 4, 5, 6)
,但是...... List(1, 2, 3) + List(4, 5, 6)
将返回List(List(1, 2, 3), 4, 5, 6)
。答案 3 :(得分:2)
首先,您在sbt.build
中编写的内容也属于Scala语法。所以这基本上是关于Scala本身的问题,而不仅限于SBT。
一般来说,在Scala:
+=
函数(如ArrayBuffer[T]
)表示将单个元素附加到集合中。此函数的参数类型为T
,即元素的类型。++=
函数也可以在可变集合中找到,它意味着将另一个集合的所有元素追加到您调用++=
的集合中。此函数的参数类型为TraversableOnce[T]
,许多Scala的集合类型(如Seq[T]
)都会延伸。所以,如果你有ArrayBuffer[Int]
,如下所示:
val testSeq = ArrayBuffer(1, 2, 3, 4)
如果你写
testSeq += 5
testSeq
现在变为ArrayBuffer(1, 2, 3, 4, 5)
。
或者,如果您编写以下而不是
testSeq += Seq(5, 6, 7, 8)
testSeq
现在变为ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8)
。
如果你说
testSeq ++= 5
您将看到编译错误,因为++=
接受集合而不是单个元素。如果你真的想要++=
附加一个元素,你应该写:
testSeq ++= Seq(5)
希望这很清楚。
答案 4 :(得分:1)