1

我想将不同的 html-parts 拆分为自己的类,现在我不了解有关此代码的一件事(-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} 类型不匹配,预期:Modifier[Builder],实际:IndexedSeq[test.bundle.all.Div.Self] {quote}

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

编辑:

为了进一步阐明我的代码和@Owen 的代码之间的区别:

在另一个类(我初始化一个 new Test)中,我也做了 import bundle.all.all_(从相同的基础派生),但不是 import scalatags.Text.all._。所以在第二个包中似乎有一些隐含的处理转换。(虽然我还没有找到它们。)

我也觉得这很有趣,毕竟这与import bundle.all._我作为捆绑传递时不同。scalatags.Text

4

1 回答 1

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

编辑:我今天又遇到了这个错误,google了一下,发现了这个问题。:)

万一它对任何人有帮助,我从那以后学到了以下几点:

调试隐式

将以下内容放入您的build.sbt:

scalacOptions ++= Seq(
  "-Xprint:typer"
)

-Yprint:typer似乎已被删除)。

这种特殊的隐含

基于此,我确定在另一个元素中-Xprint:typer使用一个元素所需的隐式是。Seqscalatags.Text.all.SeqFrag

于 2016-07-10T20:47:09.280 回答