Как напечатать список через запятую с помощью деревушки? - PullRequest
6 голосов
/ 24 сентября 2011

На языке шаблонов Гамлета, поставляемом с yesod, каков наилучший способ печати списка через запятую?

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

The values in the list are
$ forall entry <- list
    #{entry}
and that is it.

Некоторые языки шаблонов, такие как Template Toolkit , предоставляют директивы для обнаружения первой или последней итерации.

1 Ответ

5 голосов
/ 24 сентября 2011

Не думаю, что есть что-то подобное.К счастью, в Hamlet легко использовать вспомогательные функции.Например, если ваши элементы представляют собой обычные строки, вы можете просто использовать Data.List.intercalate для добавления запятых между ними.

The values in the list are 
#{intercalate ", " list} 
and that is it.

Если вы хотите делать более сложные вещи, вы можете написать функции для работы со значениями Гамлета.Например, вот функция, которая добавляет запятые и «и» между значениями Гамлета в списке.

commaify [x] = x
commaify [x, y] = [hamlet|^{x} and ^{y}|]
commaify (x:xs) = [hamlet|^{x}, ^{commaify xs}|]

Используется синтаксис ^{...} для вставки одного значения Гамлета в другое.Теперь мы можем использовать это, чтобы написать разделенный запятыми список подчеркнутых слов.

The values in the list are 
^{commaify (map underline list)} 
and that is it.

Здесь underline - это просто небольшая вспомогательная функция для создания чего-то более интересного, чем простой текст.

underline word = [hamlet|<u>#{word}|]

При визуализации это дает следующий результат.

The values in the list are <u>foo</u>, <u>bar</u> and <u>baz</u> and that is it.
...