Почему _ нельзя использовать внутри интерполяции строк?
Это работает
(x => s"$x")
но это
(s"${_}")
дает
[error] ...: unbound placeholder parameter
[error] (s"${_}")
Это только потому, что s"..."
конструкция страдает от Leaky Abstraction?
Более того: (s"$_")
терпит неудачу с совершенно другим выводом:
[error] ...: invalid string interpolation: `$$', `$'ident or `$'BlockExpr expected
[error] (s"$_")
[error] ^
[error] ...: unclosed string literal
[error] (s"$_")
1 ответ
На мой взгляд, правильно называть интерполяцию строк дырявой абстракцией. Хотя в большинстве случаев он работает нормально, во многих крайних случаях он просто не работает так, как того ожидают. Это еще одно воплощение такого крайнего случая.
Я не знаю почему s"$_"
не принимается компилятором. Некоторое время назад был выдвинут запрос, который ввел этот синтаксис для сопоставления с образцом: PR 2823
Интересно, что этот PR также содержит тестовые случаи, которые проверяют, что подчеркивание вне соответствия шаблона приводит к ошибке.
К сожалению, нет дальнейшего описания, почему это реализовано так, как это реализовано.
som-snytt, парень, который реализовал пиар, активен на SO, надеюсь, он сможет рассказать больше.