Scala初心者がScala学習に使っているREPL

Scalaを使い始めて、半年以上が過ぎてきました。

セプテーニ・オリジナル2年目の越です。
僕がScalaの学習をする時にREPLでいろいろ試すことが多いので、よく使っているものをまとめてみました。

# ライブラリをREPL上で動かして試したいときなどに使っている機能をまとめてみました

 


###### build.sbt

```
lazy val root = (project in file(".")).
settings(
name := "practice",
version := "1.0",
scalaVersion := "2.11.4"
)

libraryDependencies ++= Seq(
"joda-time" % "joda-time" % "2.9",
"org.joda" % "joda-convert" % "1.8"
)
```

```
>sbt console
```


###### [:paste]を使って以下のスクリプトを入力してみる
*コンパニオンオブジェクトをREPL上で定義するときなどに使用しています(REPLではパッケージの入れ子構造のように定義されていくため)

```
> :paste
```

```
import org.joda.time.DateTime
import org.joda.time.format.DateTimeFormat

case class DT(dateTime: DateTime) {
override def toString = dateTime.toString(DateTimeFormat.fullDate())

lazy val year = dateTime.getYear()
lazy val month = dateTime.getMonthOfYear()
lazy val day = dateTime.getDayOfMonth()
lazy val hour = dateTime.getHourOfDay()
lazy val minute = dateTime.getMinuteOfHour()
lazy val second = dateTime.getSecondOfMinute()
}

object DT {
def now = DT(new DateTime())
}
```

###### 出力結果
override def toStringをやっておくと、
applyしたときの初期出力を調整できたりします。

```
scala> DT.now
res1: DT = 2015年11月7日
```

### 途中までのREPL内の情報を残しておきたい場合[:save]
保存先のディレクトリを作成しておく

```
> mkdir snipet
```

REPL上で:saveを実行する。
*このときにres1にDT.nowの値いが入っている状態

```
scala> :save snipet/joda_datetime.scala
```

#### 保存したREPLの情報を再読み込みする方法


```
scala> :load snipet/joda_datetime.scala
Loading snipet/joda_datetime.scala...
res1: DT = 2015年11月7日
```

保存しておくことで、あとで試したい時にも再定義が簡単に行えて便利です。