Какая объяснительная марка делает в (!_._2.isEmpty)
?Значение восклицательного знака в zipAll .takeWhile (! _._ 2.isEmpty)
Как и в:
def startsWith[A](s: Stream[A]): Boolean =
zipAll(s).takeWhile(!_._2.isEmpty) forAll {
case (h,h2) => h == h2
}
взяты из Stream.
Это просто отрицание?
Если да, то почему не нужно пространство между !
и _
?
Не является !_
интерпретирован как метод name?
Могут ли имена методов содержать или начинаться с !
?
'! _' так же, как'! X', за что '_' средства, за исключением. То есть, как 'x', так и' _' являются действительным (полным-в-контексте) идентификатором, а Scala (лучше или хуже) здесь не является чувствительным к пробелу. Во всем контексте он эквивалентен форме с явной скобкой - '! (((_) ._ 2) .isEmpty)'. Overkill, но он должен показать разбор синтаксического разбора. – user2864740
(Правила lex'ing в «white-space/identifier» также объясняют, почему нужно использовать 'foo_ =', а не 'foo =', последний из которых анализируется как 'foo',' = '. И * all * этого описан в [Спецификации языка Scala] (http://www.scala-lang.org/documentation/). – user2864740
Спасибо за объяснение! – jhegedus