2013-05-22 4 views
5
私は私のニーズを満たすために、次のコードを使用しています

Scalaの未結合のプレースホルダパラメータ

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

しかし、私はプレースホルダを使用したいと思います。 the string interpolator documentationによると:

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

することに展開する必要があります。

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

しかし、後者の作品、_error: unbound placeholder parameterをスローした、かつてのではありません。どうして?

答えて

10

私は、構文と信じている:

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

コンパイラは_が、それは動作しません、その場合にはs機能に属していることを信じています。あなたは簡単にこのような何かをすることによってこの問題を解決することができます

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

あなたは無名関数に関連して、プレースホルダのための規則にさらに明確にするため、このlinkを見を持っている場合があります。

EDIT: はこの記事によると、プレースホルダの構文が働いていたので、多分これは、回帰エラーまたはこのように動作することを意図していなかった機能です。https://groups.google.com/forum/#!msg/scala-internals/G_54LGj0zpg/REZfyXZ6-RwJ

+0

私はすでにでした溶液を加え私の質問で直接使用します。私はできるだけ多くの信念を持ちたいと思っています。 's'は関数ではなく、スカラ関数です。 –

+1

@MikaëlMayerまあ、いいえ、それは言語機能ではありません。これは以下のように定義されています:http://www.scala-lang.org/api/current/#scala.StringContext 未加工の ""、f ""を使用したり、独自の文字列補間器(json ""、sql ""、...) – VasyaNovikov

関連する問題