#scala
#scala
Вопрос:
Что означает x#::xs
в Scala?
например
case x #:: xs => {
В этом случае x был потоком, но я полагаю, что тот же синтаксис действителен и для списка ecc…
Ответ №1:
Это экстрактор для потоков сопоставления с образцом. Это недопустимо для списков. В списках есть ::
(обратите #
внимание, что в списке нет).
Смысл case x #:: xs =>
в том, что при сопоставлении шаблона x
он будет содержать начало потока, а xs
остальная часть потока (хвост) будет содержать.
Проверьте документацию stream для получения примеров определения потоков.
Комментарии:
1. эквивалентно ли это x::xs для списка?
2. @Donbeo да, x :: xs в списках эквивалентно x #:: xs в потоках при сопоставлении с образцом. Вы также можете проверять объекты экстрактора .
3. ОК. Насколько я понимаю, поток вычисляется только при его вызове. В этом случае вычисляются первый и второй элементы потока? (Для проверки соответствия шаблону)
4. Только первый (
x
) и первый из tail (xs
) . Остальное не нужно оценивать. Но обратите внимание, что поток вычисляется с задержкой, что означает, что его элементы оцениваются только один раз, а затем значение кэшируется.