Scalatags,不能从其他类返回div()

时间:2016-07-10 16:17:16

标签: scala scalatags

我想将不同的html部分拆分成自己的类,现在我不明白这个代码的一件事(-snippet):

SELECT CONCAT_WS(', ', IFNULL(column1, NULL), 
         IFNULL(column2, NULL), IFNULL(column3, NULL), 
         IFNULL(column4, NULL), IFNULL(column5, NULL))
FROM yourtable

工作正常。

所以:

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

{报价} 类型不匹配,预期:修改器[Builder],实际:IndexedSeq [test.bundle.all.Div.Self] {引用}

我根本不明白为什么。是否有一些隐含的魔法?可以启发我并告诉我它是如何完成的吗?

修改

进一步澄清我和@Owen的代码之间的区别:

在另一个类中(我初始化一个新的h1())我也导入Test(从相同的基础派生),但不导入bundle.all.all_。所以在第二个包中似乎有一些涉及转换的含义。 (虽然我还没有找到它们。)

我发现,当我将scalatags.Text.all._作为捆绑包传递时,这与import bundle.all._不一样很有趣。

1 个答案:

答案 0 :(得分: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)
  }
}