什么"!" 斯卡拉意味着什么?

Lea*_*wly 2 scala

我正在查看一段代码,其中包含以下内容:

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

我知道这_是通配符,scala但我不知道!应该做什么.

!scala 中的意思是什么?

Rob*_*let 10

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

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

2.+(3)   // result is 5
Run Code Online (Sandbox Code Playgroud)

当你写作时2 + 3,这实际上是上面表达式的语法糖.

任何类型都可以定义一个unary_!方法,这是!something令人厌倦的方法.布尔人实现它,具有逻辑否定("不")的明显含义,即感叹号在其他语言中具有C遗产.

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

graph.vertices.filter { t => !(t._2._1) }
Run Code Online (Sandbox Code Playgroud)

where t元组是元组的元组,第二个元素的第一个元素具有实现的类型,unary_!并且(根据需要.filter)返回a Boolean.我敢把口袋里的钱押在元素本身就是一个Boolean,在这种情况下!只是意味着"不是".