Scala School (8)
体調不良で死亡中。以下は昨日書いてた下書きです。そのまま投入。
ちょっとトバします。今日は Simple Build Tool を確認。以下は別途。
Getting Started
ええと、でびあんパケジに sbt-launch.jar があるのかな。apt-cache search しても見つかりませんね。で、google code -> github から以下に辿り着きました。
とりあえず deb パケジが download できるみたいなので取得して以下。
$ sudo dpkg -i ~/Download/sbt.deb
バージョン的には 0.12.1 な模様。
$ dpkg -L sbt /. /etc /etc/sbt /etc/sbt/sbtopts /usr /usr/bin /usr/bin/sbt /usr/lib /usr/lib/sbt /usr/lib/sbt/sbt-launch.jar /usr/share /usr/share/sbt /usr/share/sbt/sbt-launch-lib.bash /usr/share/doc /usr/share/doc/sbt /usr/share/doc/sbt/changelog.gz /usr/share/doc/sbt/copyright /usr/share/man /usr/share/man/man1 /usr/share/man/man1/sbt.1.gz
では sbt 実行してみます。
$ sbt Getting net.java.dev.jna jna 3.2.3 ... downloading http://repo1.maven.org/maven2/net/java/dev/jna/jna/3.2.3/jna-3.2.3.jar ... [SUCCESSFUL ] net.java.dev.jna#jna;3.2.3!jna.jar (1407ms) :: retrieving :: org.scala-sbt#boot-jna confs: [default] 1 artifacts copied, 0 already retrieved (838kB/158ms) Getting org.scala-sbt sbt 0.12.1 ...
何かしてます。だんまり状態。と思ったら凄い勢いで jar を取得してますね。
で以下なソレで停止。
[info] Set current project to default-805a89 (in build file:/home/rms/OLDHome/rms/Documents/Scala/0.helloworld/) >
sample と入力してみるか。
[error] Not a valid command: sample (similar: apply, set, append) [error] Expected '/' [error] Expected ':' [error] Not a valid key: sample (similar: name, compile, state) [error] sample [error] ^
あら。C-d してリトライしてみます。いかん。Hello, World も確認します。
ええと、こうして
$ cat >hw.scala object Hi { def main(args: Array[String]) = println("Hi!") } $
sbt 起動して
$ sbt > run
するとなんかコンパイルしてますね。Hi! って出力もありました。なんとなくプロジェクトを作ってくれるのが sbt だと思ってたんですが全然違うんですね。
Adding Some Code
もひとつプロジェクトを作ります。SimpleParser って名前で。で、src/main/scala/com/twitter/sample/SimpleParser.scala を作成。
$ mkdir SimpleParser $ cd SimpleParser $ mkdir -p src/main/scala/com/twitter/sample/ package com.twitter.sample case class SimpleParsed(id: Long, text: String) class SimpleParser { val tweetRegex = "\"id\":(.*),\"text\":\"(.*)\"".r def parse(str: String) = { tweetRegex.findFirstMatchIn(str) match { case Some(m) => { val id = str.substring(m.start(1), m.end(1)).toInt val text = str.substring(m.start(2), m.end(2)) Some(SimpleParsed(id, text)) } case _ => None } } } $
で、次。This is ugly and buggy, but should compile. らしいげな。
Testing in the Console
ええと、sbt test しなさい、ということなのかな。テキスト読んでません (汗
$ sbt test (中略 [info] No tests to run for test:test [success] Total time: 27 s, completed Jan 11, 2013 3:39:12 PM $
む、以下は?
$ sbt 'test-only com.twitter.sample.SampleSpec' [info] No tests to run for test:test-only [success] Total time: 2 s, completed Jan 11, 2013 3:40:15 PM [error] Not a valid key: com (similar: compile, commands, compilers) [error] com.twitter.sample.SampleSpec [error] ^
駄目です。sbt で起動して云々とか書いてあるのかな。
$ sbt (略 > console [info] Starting scala interpreter... [info] Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_06). Type in expressions to have them evaluated. Type :help for more information. scala>
あらら。あ、ここから続きがあるのか。
scala> import com.twitter.sample._ import com.twitter.sample._
次が以下。
scala> val tweet = """{"id":1,"text":"foo"}""" tweet: java.lang.String = {"id":1,"text":"foo"}
SimpleParser なオブジェクトを作って
scala> val parser = new SimpleParser parser: com.twitter.sample.SimpleParser = com.twitter.sample.SimpleParser@65a8f181
次で parse か。
scala> parser.parse(tweet) res1: Option[com.twitter.sample.SimpleParsed] = Some(SimpleParsed(1,foo))
ファイル化したソースコードはこうして実行しなさい、って事なの? なんか微妙。ただ、これでテキストファイルに書いたパーツを試験することはできますね。
むむ
ちょっとここまでの部分、テキストをよく読んでみます。
つうか
scala の REPL とか sbt なナニを起動しっぱなしにしてると端末が死にますね。これはこれで如何なものかとorz
# 端末も非力なのですがorz