【问题标题】:What does "!" mean in scala?"!" 是什么意思在scala中是什么意思?
【发布时间】:2023-03-27 23:26:02
【问题描述】:

我正在查看一段代码:

graph.vertices.filter(!_._2._1)

我知道_scala 中的通配符,但我不知道! 应该做什么。

! 在 Scala 中是什么意思?

【问题讨论】:

  • 与大多数其他语言一样,! = "logical not"
  • 是什么让你认为它是 Akka 的tell?由于代码在filter 内,我认为假设它是“逻辑不”更有意义。此外,如果它是 Akka 的 tell,它将无法编译,因为左侧需要一个 ActorRef。其次,_ 在此示例中不是通配符。它是当前的vertex
  • 就像马克说的。例如,您可以写Seq("foo", "bar", "").filter(_.isEmpty),或Seq("foo", "bar", "").filter(!_.isEmpty),或等价的Seq("foo", "bar", "").filter(x => !x.isEmpty)

标签: scala


【解决方案1】:

Scala 在语法级别没有运算符。所有的操作都是方法。

例如,语法中没有加法运算符,但数字有+ 方法:

2.+(3)   // result is 5

当您编写2 + 3 时,这实际上是上述表达式的语法糖。

任何类型都可以定义一个unary_! 方法,这就是!something 被脱糖的东西。布尔实现它,具有明显的逻辑否定(“非”)含义,感叹号在其他具有 C 遗产的语言中具有。

在您的问题中,表达式是以下调用的缩写形式:

graph.vertices.filter { t => !(t._2._1) }

其中t 是一个元组,其中第二个元素的第一个元素 具有实现unary_! 的类型并且(根据.filter 的要求)返回一个Boolean。我会用口袋里的钱打赌,元素本身就是Boolean,在这种情况下,! 只是表示“不是”。

【讨论】:

    猜你喜欢
    • 2014-01-16
    • 2011-08-12
    • 2017-06-11
    • 2018-03-05
    • 2021-10-24
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 2016-08-17
    相关资源
    最近更新 更多