I am using the following code to meet my needs:

 (1 to 5)..map(i => s"\\x${i}")  // Produces List("\\x1", "\\x2", "\\x3", "\\x4", "\\x5")

But I would like to use a placeholder. According to the string interpolator documentation :

(1 to 5).map(s"\\x${_}")

should expand to:

(1 to 5).map(StringContext("\\\\x","").s(_))

But the latter works, not the former, which throws an error: unbound placeholder parameter on _. Why?

有帮助吗?

解决方案

I believe with the syntax:

(1 to 5).map(s"\\x${_}")

The compiler believes that the _ belongs to the s function in which case it won't work. You can easily solve this by doing something like this:

(1 to 5).map(i => s"\\x${i}")

You might want to have a look at this link for further clarity on the rules for placeholders in relation to anonymous functions.

EDIT: According to this post, the placeholder syntax used to work, so maybe this is a regression error or a feature that was never meant to work this way: https://groups.google.com/forum/#!msg/scala-internals/G_54LGj0zpg/REZfyXZ6-RwJ

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top