Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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"$_")
like image 858
Erik Kaplun Avatar asked Nov 10 '13 21:11

Erik Kaplun


People also ask

Can we use expressions Inside string interpolation?

String interpolation is a technique that enables you to insert expression values into literal strings.

Which character should be used for string interpolation?

To identify a string literal as an interpolated string, prepend it with the $ symbol. You can't have any white space between the $ and the " that starts a string literal. To concatenate multiple interpolated strings, add the $ special character to each string literal.

What happens if you use NULL value in string interpolation?

If the interpolation expression evaluates to null , an empty string ("", or String. Empty) is used. If the interpolation expression doesn't evaluate to null , typically the ToString method of the result type is called.

Can we use ternary operator in string interpolation?

Beyond variablesYou can do that directly with string interpolation, simply by using the ternary operator inside the string: Download, Edit & Run this example!


1 Answers

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.

like image 65
kiritsuku Avatar answered Oct 02 '22 12:10

kiritsuku