【问题标题】:Scalatags, cannot return div() from other classScalatags,不能从其他类返回 div()
【发布时间】:2020-05-05 14:41:21
【问题描述】:

我想将不同的 html 部分拆分为自己的类,但现在我对这段代码一无所知(-sn-p):

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() 被删除)

{引用} 类型不匹配,预期:Modifier[Builder],实际:IndexedSeq[test.bundle.all.Div.Self] {quote}

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

编辑:

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

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

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

【问题讨论】:

    标签: scala scalatags


    【解决方案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)
      }
    }
    

    edit:我今天刚刚又遇到这个错误,google了一下,找到了这个问题。 :)

    如果它对任何人有帮助,我从那以后学到了以下东西:

    调试隐式

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

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

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

    这种特殊的隐含

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

    【讨论】:

    • 这就是区别:在另一个类中我也做了import bundle.all.all_(从相同的基础派生),但不是 import scalatags.Text.all._。所以在第二个包中似乎有一些隐含的处理转换。虽然我还没有找到它们。我觉得这特别有趣,因为bundle.all._ 应该与scalatags.Text.all._ 相同,因为我将scalatags.Text 传递为bundle:/ 无论如何谢谢!
    • @Sorona 如果你需要找到一个特定的隐式,-Yprint:typer 是一个好方法。
    猜你喜欢
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 2013-08-15
    • 2015-07-26
    • 1970-01-01
    相关资源
    最近更新 更多