Ответ 1
Пусть сломает! Во-первых, я переформатировал линию, чтобы несколько увеличить "удобочитаемость".
let val = !(
(
|(..): (_, _), [email protected]_| __
)(
(
&*"\\",
'@'
) /**/,
{}
)
==
{
&[..=..][..];
}
)//
;
Он начинается с let val = и заканчивается //<newline>; , Таким образом, это простая let-связывание формы let val = ⟨v⟩; , Давайте обсудим, что делает ⟨v⟩:
- Отрицание через не-оператор
!( ⟨_⟩ )- Сравнение через
==:⟨lhs⟩ == ⟨rhs⟩- ⟨Lhs⟩: вызов функции замыкания
( ⟨closure⟩ )( ⟨args⟩ )- ⟨Closure⟩: определение закрытия
|⟨first_param⟩, ⟨second_param⟩| ⟨body⟩|⟨first_param⟩, ⟨second_param⟩| ⟨body⟩- ⟨First_param⟩:
(..): (_, _). Этот параметр имеет аннотацию типа(_, _)что означает, что это 2-кортеж. Шаблон (где обычно вы найдете одно имя)(..)что означает: кортеж, но игнорировать все его элементы. - ⟨Second_param⟩:
[email protected]_. Это шаблон, обычно известный из привязок соответствия:name @pattern. Таким образом, фактический шаблон равен_(который ничего не связывает), и значение привязывается через@к имени__(два@подчеркивания, который является своего рода допустимым идентификатором). - ⟨Body⟩:
__. Это просто идентификатор, которым мы привязываем второй параметр. Таким образом, замыкание в основном эквивалентно|_, x| x|_, x| x.
- ⟨First_param⟩:
- ⟨Args⟩: список из двух аргументов со встроенным комментарием
/**/между ними:⟨first_arg⟩/**/, ⟨second_arg⟩- ⟨First_arg⟩:
(&*"\\", '@'). Это просто 2-кортеж, где первый элемент представляет собой строку, содержащую обратную косую черту, а вторая - char'@'.&*Для первого элемента отменяется. - ⟨Second_arg⟩:
{}. Это пустой блок, который имеет тип(). Так как второй аргумент, единица передается.
- ⟨First_arg⟩:
- ⟨Closure⟩: определение закрытия
- ⟨Rhs⟩: скошенный блок с одним утверждением внутри:
{ ⟨stmt⟩; }{ ⟨stmt⟩; }. Обратите внимание, что это утверждение с точкой с запятой. Это означает, что результат не возвращается из блока. Вместо этого блок возвращает()же, как пустой блок{}.- ⟨Stmt⟩: выражение для индексирования
{ &⟨collection⟩[⟨index⟩] }.- ⟨Collection⟩:
[..=..]. Это массив с одним элементом. Элемент is..=..который являетсяRangeToInclusiveгдеendдиапазона - этоRangeFullнаписанный.. - ⟨Index⟩:
..Это сноваRangeFull.
- ⟨Collection⟩:
- ⟨Stmt⟩: выражение для индексирования
- ⟨Lhs⟩: вызов функции замыкания
- Сравнение через
Итак, в итоге: мы сравниваем результат вызова замыкания на скошенный блок, который вычисляет значение (). Закрытие в основном |_, x| x |_, x| x и второй аргумент, который мы передаем ему, - это {} (который оценивает ()), поэтому выражение выражения закрытия закрытия вычисляется как ().
Это означает, что все это эквивалентно:
-
let val = !(() ==() );, что эквивалентно: -
let val = !( true );, что эквивалентно: -
let val = false;