2016-07-10 5 views
1

에서 DIV()를 호출 할 수 없습니다 잘 작동합니다.Scalatags, 나는 자신의 클래스에 다른 HTML-부분을 분할하고 싶습니다 지금은이 코드 (-snippet)에 관한 한 가지를 이해하지 않는 다른 클래스

그래서 수행합니다

하지 작업을 수행 무엇
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()이 제거되면)라고

예상 {인용} 유형 불일치 : 수정 [빌더, 실제 : IndexedSeq [test.bundle.all.Div.Self] {인용}

그리고 나는 그 이유를 이해하지 못한다. 암묵적인 마술이 진행되고 있습니까? 어떻게 깨달을 수 있습니까?

편집 :

더 광산 및 @Owen의 코드 사이의 차이를 명확히하려면 : 파생 (나는 새로운 Test를 초기화하는 경우) 나뿐만 아니라 수입 bundle.all.all_을했던 다른 클래스에서

을 (동일한 기본에서 가져옴), 가져 오기는 허용되지 않습니다. scalatags.Text.all._. 따라서 두 번째 패키지에는 전환을 처리하는 몇 가지 암시가있는 것으로 보입니다. (아직 찾지 못했지만)

scalatags.Text을 번들로 전달할 때 이것이 import bundle.all._과 같지 않다는 사실도 알게되었습니다.

답변

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

을 그리고 여기의 차이입니다 : 여기에 컴파일 된 전체 코드의 I입니다뿐만 아니라 (같은 염기로부터 유도 된) bundle.all.all_' 다른 클래스에서 내가'가져 오기를했지만 *하지 *'수입 scalatags. Text.all._'. 따라서 두 번째 패키지에는 전환을 처리하는 몇 가지 암시가있는 것으로 보입니다. 나는 아직 그들을 찾지 못했지만. 특히'bundle.all._'은'scalatags.Text.all._'과'scatatags.Text'를'bundle'으로 전달하기 때문에 재미 있습니다./어쨌든 고맙습니다! – Sorona

+0

@Sorona 특별히 암시적인 것을 찾으려면'-Yprint : typer'가 좋은 방법입니다. – Owen