问题
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?
回答1:
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
来源:https://stackoverflow.com/questions/16688365/scala-unbound-placeholder-parameter