6

コメントがスレッド化されたブログ投稿のテンプレートを作成しています。スレッド化されたコメントのテンプレートを作成する自然な方法は、Html の構築に再帰的な方法を使用します。このようなもの:

@showComment(comment: models.Comment) = {
    <div class="comment">
        <div class="comment-metadata">
            <span class="comment-author">by @comment.author,</span>
            <span class="comment-date">
                @comment.postedAt.format("dd MMM yy")
            </span>
        </div>
        <div class="comment-content">
            <div class="about">Detail: </div>
            @Html(comment.content.replace("\n", "<br>"))
        </div>
        <a href="@action(controllers.Application.replyComment(comment.id()))">Reply</a>
        @comments filter { c => c.parent_id == comment.id } map { 
            c => @showComment(c)
        }
    </div>
}

問題は、再帰ブロックを使用するとエラーが発生することです。

発生したエラー: 再帰メソッド showComment には結果タイプが必要です

showComment に戻り値の型を入れようとすると、次のエラーが発生します。

発生したエラー: 見つかりません: 値 showComment

回避策はありますか?

4

3 に答える 3

4

これは私のために働く:

コードを同封する@{}

@{

    //use regular scala here:
    def showComment(comment: models.Comment):Node = {
    ....
    }
    //the above just declared a recursive method, now call it:

   showComment(...)

}
  • 再帰的メソッドを定義する
  • ブロックの最後でメソッドを呼び出す
  • 利益 !
于 2012-12-08T15:06:29.517 に答える
0

Scalaでは、再帰メソッドには戻り型が必要です。「Scalaが再帰関数に戻り型を必要とするのはなぜですか? 」を参照してください。

私はPlayFrameworkについてあまり(何もないように)知りませんが、試してみてください:

@showComment(comment: models.Comment):Node = {
<div class="comment">
    <div class="comment-metadata">
        <span class="comment-author">by @comment.author,</span>
        <span class="comment-date">
            @comment.postedAt.format("dd MMM yy")
        </span>
    </div>
    <div class="comment-content">
        <div class="about">Detail: </div>
        @Html(comment.content.replace("\n", "<br>"))
    </div>
    <a href="@action(controllers.Application.replyComment(comment.id()))">Reply</a>
    @comments filter { c => c.parent_id == comment.id } map { 
        c => @showComment(c)
    }
</div>
}
于 2011-10-10T00:13:06.763 に答える