LoginSignup
2
0

More than 5 years have passed since last update.

【質問】scalaのバージョン変更にかかる変更点について

Last updated at Posted at 2018-05-02

【解決しました】

エラーを気にせずそのままコンパイルすると、何の問題もなく実行されました。
コードに間違いはなく、eclipseが勝手にエラーを吐いているだけだったようです。

================================================================================

Qiitaに投稿されていた記事を参考にScala,PlayFrameworkの学習を進めていたのですが,scalaのバージョンアップが原因なのか正常に動作しない箇所が複数あります.
インターネット上で情報を集めたのですが,プログラミング初心者ゆえに、かなかなか解決の糸口が見えません.
皆様のお力を貸していただきたく投稿させていただきました.

参考にさせていただいているのは,2017年07月29日に最後の更新がなされたこちらの記事「Play Frameworkハンズオン」です.

以下が私が現在開発を行っている環境になります.

console
$ java -version
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)
console
$ sbt sbt-version
.
.
[info] 0.13.11

Play Frameworkハンズオン」にて掲載されていたコードは以下の通りになります。

/play-hands-on/app/services/Todo.scala
package services

case class Todo(name: String)
/play-hands-on/app/controllers/TodoController.scala
package controllers

import javax.inject._
import play.api.mvc._
import play.api.data._
import play.api.data.Forms._
import services._

def list() = Action { implicit request: MessagesRequest[AnyContent] =>
    val items: Seq[Todo] = Seq(Todo("Todo1"), Todo("Todo2"))
    Ok(views.html.list(items))
  }
/play-hands-on/app/views/list.scala.html
@import services._
@(items: Seq[Todo])

<html>
    <head>
        <title>Todo</title>
    </head>
    <body>

        <section>
            <table>
                <thead>
                    <tr>
                        <th>名前</th>
                    </tr>
                </thead>
                <tbody>
                @items.map { todo =>
                    <tr>
                        <td>@todo.name</td>
                    </tr>
                }
                </tbody>
            </table>
            <a href="/todo/new">登録画面</a>
        </section>

    </body>
</html>

以下は私がこのコードに少し変更を加えたコードへさらに「eclipse」で表示された警告などを書き足したものになります。

/play-hands-on/app/services/Todo.scala
package services

case class Todo(name: String)
/play-hands-on/app/controllers/TodoController.scala
package controllers

import javax.inject._
import play.api.mvc._
import play.api.data._
import play.api.data.Forms._
import services._

//変更箇所
def list = Action {
    val items: Seq[Todo] = Seq(Todo("Todo1"), Todo("Todo2"))
    //itemsで「type mismatch; found : Seq[services.Todo] required: String」のエラー
    Ok(views.html.list(items))
  }
/play-hands-on/app/views/list.scala.html
@import services._
@(items: Seq[Todo])

<html>
    <head>
        <title>Todo</title>
    </head>
    <body>

        <section>
            <table>
                <thead>
                    <tr>
                        <th>名前</th>
                    </tr>
                </thead>
                <tbody>
                <!-- ここから -->
                @items.map { todo =>
                    <tr>
                        <td>@todo.name</td>
                    </tr>
                }
                <!-- ここで「テキスト・ストリング(@items.map{ todo =>)が無効です。」の警告 -->
                </tbody>
            </table>
            <a href="/todo/new">登録画面</a>
        </section>

    </body>
</html>

ここにどのような変更を加えれば意図した動きをするようなコードとなるのでしょうか。教えていただきたいです。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0