Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

scala - Why can't _ be used inside of string interpolation?

This works

(x => s"$x")

but this

(s"${_}")

results in

[error] ...: unbound placeholder parameter
[error]   (s"${_}")

Is this a case of leaky abstraction?

Furthermore: (s"$_") fails with a completely different output:

[error] ...: invalid string interpolation: `$$', `$'ident or `$'BlockExpr expected
[error]   (s"$_")
[error]      ^
[error] ...: unclosed string literal
[error]   (s"$_")
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Calling string interpolation a leaky abstraction is totally right in my opinion. While it works fine in most cases, there are many edge cases where it just doesn't work the way how one expects it. This one is another incarnation of such an edge case.

I don't know why s"$_" is not accepted by the compiler. Some time ago there were a pull request that introduced this syntax for pattern matching: PR 2823

Interestingly this PR also contains test cases that test that the underscore outside of a pattern match produces an error.

Unfortunately there is no further description why this is implemented the way it is implemented.

Som Snytt, the guy who implemented the PR is active on SO, hopefully he can tell more.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...