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)
}
}