isEmpty 为空集返回 false

Man*_*dha 3 scala

在这段代码中

    def findQuestionCreatedCount(transaction:DistributedTransaction,userId:UUID,tagSet:Set[String]):Future[List[(String,Int)]]={
        logger.trace(s"will find questions created portfolio for ${userId} and tagSet ${tagSet}. tagSet empty ${tagSet.isEmpty}")
        if(tagSet.isEmpty == false) { //set has data
      ...
}
Run Code Online (Sandbox Code Playgroud)

我看到印刷品 will find questions created portfolio for 3455c2b9-37f2-4373-9dcd-9e71b43e8c3d and tagSet Set(). tagSet empty false

为什么 tagSet 的值为Set()false?不应该是真的吗?

Mar*_*lic 5

可能""在集合内有一个空字符串,因此在打印时不可见,例如考虑

scala> Set("").toString
val res0: String = Set()

scala> Set("").isEmpty
val res1: Boolean = false
Run Code Online (Sandbox Code Playgroud)

你可以确认是否是这样

tagSet.contains("")
Run Code Online (Sandbox Code Playgroud)

作为旁注,请考虑如何stringOf打印

scala> scala.runtime.ScalaRunTime.stringOf(Set(""))
val res0: String = Set("")
Run Code Online (Sandbox Code Playgroud)

此外PPrint将打印字符串有包围引号可见,例如

println(Set(""))
pprint.pprintln(Set(""))
println("")
pprint.pprintln("")
Run Code Online (Sandbox Code Playgroud)

产出

Set()
Set("")

""
Run Code Online (Sandbox Code Playgroud)