Документация API для Map.filterKeys гласит:
@ возвращает неизменную карту, состоящую только из тех пар значений ключа этой карты, где ключ удовлетворяет предикату p.Полученная карта оборачивает исходную карту без копирования каких-либо элементов.
Это означает, что filterKeys
не начинает оценку с нетерпением, а вместо этого создает ленивое представление, которое скрывает некоторые ключи.Предикат не оценивается до тех пор, пока вы на самом деле не попытаетесь получить доступ к ключу, или, в этом случае, до тех пор, пока вы не выполните итерацию по карте.
Итерация инициируется методом toString
.Метод toString
в r
вызывается REPL (в данном случае Scastie), как только вы пишете r
, потому что он должен создать строковое представление результата.
Примечаниечто ничего не печатается, если вы запускаете ту же программу, что и сценарий: при запуске в качестве сценария не вызывается toString
для промежуточных результатов, поэтому нет необходимости перебирать карту, и поэтому toString
не вызывается.