2013-05-22 5 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' не является функцией, это функция scala. –

+1

@ MikaëlMayer ну, нет, это не язык. Он определен здесь: http://www.scala-lang.org/api/current/#scala.StringContext Вы также можете использовать raw "", f "" или даже создавать свои собственные строковые интерполяторы (json "", sql "", ...) – VasyaNovikov

 Смежные вопросы

  • Нет связанных вопросов^_^