2011年10月19日

Scalaのbreak文

scala(2.8)はbreak文をライブラリレベルでサポートしています。構文では無くライブラリなので少し他の言語よりメンドクサイ感じの記述になります。例えば「0-10までのループで、5になったらbreakで抜ける場合」は、

import scala.util.control.Breaks.{break,breakable}

breakable{
for(i <- 0 to 10){
if(i==5)break
println(i)
}
println("not reachable code")
}
println("break")

とすると出力結果は

0
1
2
3
4
break

となります。breakはfor文からの脱出では無くbreakableからの脱出になります。

breakableを入れ子にすると

import scala.util.control.Breaks.{break,breakable}

breakable{
breakable{
for(i <- 0 to 10){
if(i==5)break
println(i)
}
}
println("reachable code")
}
println("break")

出力結果は

0
1
2
3
4
reachable code
break

となりbreakでは最下層のbreakableからの脱出という挙動になります。

breakの抜ける場所を指定したい時などは、Breaksクラスのインスタンスを作成して、breakをするようにします。

import scala.util.control.Breaks
val breaks1,breaks2 = new Breaks
breaks1.breakable{
breaks2.breakable{
//breaks1から脱出する
breaks1.break
}
println("breaks2 break")
}
println("breaks1 break")

出力結果は、

breaks1 break

となる事から、breaks2.breakableを飛び越えてbreaks1.breakableから脱出できています。


posted by purigen at 11:00| Comment(0) | TrackBack(0) | Scala | このブログの読者になる | 更新情報をチェックする

2011年02月21日

svm入れるよ

scalaの複数バージョンを切り替えたいなーっと思ったら、@yuroyoroさんがsvmというscalaのバージョン管理ツールをgithubにUPして下さっているようなので使ってみた。

環境:Mac OS X 10.6.6

1.ダウンロード&設定


github:svmからダウンロードしてきて解凍。svmがあると思うので、パスの通ってる所にコピー。

2.path通す


「$HOME/.svm/current/rt/bin」を追加する必要という事なので、「~/.bash_profile」に↓を追加してパスを通す

export SCALA_HOME=~/.svm/current/rt
export PATH=$SCALA_HOME/bin:$PATH


一応確認で、

> echo $SCALA_HOME

Users/ユーザー名/.svm/current/rt

>echo $PATH

Users/ユーザー名/.svm/current/rt/bin:その他もろもろのパス

が表示されてればOK.

3.coreutilsのインストール


readlinkを使ってるのでcoreutilsをインストールする。


> sudo port install coreutils


4.scala入れる


何はともあれscalaを入れないと始まらないのですが、svmにinstallコマンドがあるので下記コマンドでOK(2.8.1.finalを入れます)。


> svm install 2.8.1.final
/usr/bin/svm: line 188: wget: command not found

Failed to download ********************************


とエラーが。。。。wgetが入っていなかったっす。うちのmacはwget入ってなかったのかww


> sudo port install wget

でいれた後にやったら問題なしでした。 っで無事インストールできたか確認。


> svm current
> currently version is 2.8.1.final

と出ればOK。 使えるコマンドはhelpコマンドで見れます。

参考:
Scalaのバージョンを簡単に切り替えられる"svm"ってヤツを作った(冷やし中華終わりました):http://d.hatena.ne.jp/yuroyoro/20110121/1295610398
github:svm https://github.com/yuroyoro/svm
posted by purigen at 10:00| Comment(0) | TrackBack(0) | Scala | このブログの読者になる | 更新情報をチェックする

2011年01月26日

scala-android.jarを入れたらscala(2.8)が動かなくなった


scalaでAndroid書こうと思って

> sbaz install scala-android

で「%SCALA_HOME%\lib\scala-android.jar」が追加されるのですが、僕の環境だとこのjarがあると

> scala
Exception in thread "main" java.lang.VerifyError: (class: scala/tools/nsc/MainGenericRunner$, method: main signature: ([Ljava/lang/String;)V) Can only throw Throwable objects at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)

と出てscalaコマンドが通らなくなりました。「scala-android.jar→_scala-android.jar」にリネームするとエラーは出なくなります。 なんで?っと思って

> sbaz available
> scala-android(2.7.0-final,2.6.1-final)

となっているので、コレが原因ですね。

android用にもう一個scala入れるとかがベターな方法なのかなー
posted by purigen at 10:00| Comment(0) | TrackBack(0) | Scala | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。