Ammonite projectなるものがあるらしい。 その中の、Ammonite-REPLはリッチなREPLが使える代物らしいので、試してみた。

Install

sudo curl -L -o /usr/local/bin/amm https://git.io/vP4Gw && chmod +x /usr/local/bin/amm && amm

Hello World!

早速ammを起動してみる。

> amm
Loading...
Welcome to the Ammonite Repl 0.7.8
(Scala 2.11.8 Java 1.8.0_20)
@ println("Hello World!")
Hello World!

ファイルに記述して実行してみる。

> echo println\(\"Hello World\!\"\) > Hello.sc
> amm Hello.sc
Hello World!

便利っぽいあれこれ

シェルスクリプトっぽく使う

さっきのHello.scの先頭に、1行追加する。

#!/usr/bin/env amm
println("Hello World!")

これでファイルを直接実行できる。

> ./Hello.sc
Compiling Hello.sc
Hello World!

ファイルをインポートする

val message = "Hello World"
import $file.Bar
println(Bar.message)
> amm Foo.sc
Compiling Foo.sc
Compiling Bar.sc
Hello World

これで、Fooで、Barで定義されたフィールドやメソッドにアクセスできる。

sugoi!

ただし、デフォルトではローカルのスコープに展開してくれないので、Bar.messageみたいな感じになる。

Fooでもmessageでアクセスしたい場合は、↓のように明示する必要がある。

import $file.Bar
impor Bar.message

println(message)

import $file.Bar.messageのように1行ではいけないので注意。1行で書くなら、

import $file.Bar, Bar.message

ワイルドカードでインポート

いちいち明示するのが面倒なら、ワイルドカードが使える。

import $file.Bar, Bar._
println(message)

ライブラリをインポートする

import $ivy.`com.typesafe.play::play-json:2.4.6`, play.api.libs.json.Json

val json = Json.toJson(Map("hello" -> "world"))
println(json)
> amm ToJson.sc
Compiling ToJson.sc
{"hello":"world"}

play-jsonが使えた sugoi!!