2013-02-24 2 views
2

Это немного неясный вопрос, но что было бы лучшим способом петли в интерполяции строк Scala? Например, если вы хотите сделать этоlooping внутри интерполяции строк scala

html"""<ul> 
    ${ 
    for (todoItem <- todoList) { 
     html"""<li>TODO: ${todoItem}</li>""" 
    } 
    } 
    </ul>""" 

Я не вижу лаконичный способ аккумулировать внутренние классы HTML, так что строка interpolater может использовать его. Единственное, что я могу думать о

html"""<ul> 
    ${ 
    var htmlList=List.empty[Html] 
    for (todoItem <- todoList) { 
     htmlList :+ html"""<li>TODO: ${todoItem}</li>""" 
    } 
    htmlList 
    } 
    </ul>""" 

и добавив еще одну его поддержку в моей пользовательских HTML interpolater

ответ

4

Он не делает никакой разницы, работаете ли вы в интерполяции строк или нет. На самом деле это точка интерполяции строк: внутри кодового блока у вас есть все возможности и возможности доступного вам языка, как и любой другой блок.

Вы должны написать это в функциональном стиле, который вы можете сделать с yield в for петле, или карту на списке:

html"""<ul> 
${ 
    for (todoItem <- todoList) yield html"""<li>TODO: $todoItem</li>""" 
} 
</ul>""" 

html"""<ul> 
${ 
    todoList.map{ todoItem => html"""<li> ODO: $todoItem</li>""" } 
} 
</ul>""" 
Смежные вопросы