Scalatags, не может вернуть div() из другого класса

Я хотел бы разделить различные html-части на собственные классы, и теперь я не понимаю одну вещь, касающуюся этого кода (-snippet):

val z = for(a <- 0 to 5) yield div(s"$a")
body(h1("Testing stuff"), z)

работает просто отлично.

Так же:

body(h1("Testing stuff"), test)
private def test = for(a <- 0 to 5) yield div(s"$a")

Что не работает, так это:

class Test[Builder, Output <: FragT, FragT](val bundle: scalatags.generic.Bundle[Builder, Output, FragT])
{
    import bundle.all._

    def render = for(a <- 0 to 5) yield div(s"$a")
}

val test = new Test(scalatags.Text)
body(h1("Testing stuff"), test.render)

Это не скомпилируется. Это говорит (когда-то h1() устранен)

{quote} Несоответствие типов, ожидаемое: модификатор [Builder], фактическое: IndexedSeq[test.bundle.all.Div.Self] {quote}

И я просто не понимаю почему. Есть ли какая-то скрытая магия? Можно ли просветить меня и показать, как это делается?

редактировать:

Чтобы уточнить разницу между моим кодом и кодом @Owen:

В другом классе (где я инициализирую новый Test) Я сделал импорт bundle.all.all_ также (получено из той же базы), но не импортируется scalatags.Text.all._, Так что во втором пакете, похоже, есть некоторые последствия, которые заботятся о преобразовании. (Хотя я еще не нашел их.)

Я также нахожу довольно забавным, что это не то же самое, что import bundle.all._ когда я прохожу scalatags.Text как связка в конце концов.

1 ответ

Решение

Твой код компилируется нормально для меня. Вот полный код, который я скомпилировал:

object TagTest1 {
  class Test[Builder, Output <: FragT, FragT](val bundle: scalatags.generic.Bundle[Builder, Output, FragT]) {
    import bundle.all._

    def render = for(a <- 0 to 5) yield div(s"$a")
  }

  {
    import scalatags.Text.all._

    val test = new Test(scalatags.Text)
    body(h1("Testing stuff"), test.render)
  }
}
Другие вопросы по тегам