問題
Groovy のリストで each() メソッドを使用するとreturnやbreakで終了せず、すべてのイテレータが処理される。
あれ、each が止まらない。
これは、Javaやpython,ruby の動きから想定していると予想外の挙動。。。
解決方法
find() を使う。
以下のページで解決策があった。結構有名な話みたい。
メタクラスでbreakを挿入したり、例外投げて止めるなどもあるみたい。
でも、find が一番シンプル。
- ちなみに for ならとめられる
for(i in 0..10){ hogehoge }
参考リンク
Groovy's each does not exit when using return
勉強になりました。ありがとうございます。
実験
hoge.each() 予想外の動き
うわーん。return で処理がとまらない。。。
myList = (1..10) def notBreak(yourList) { yourList.each { list -> if(list == 5) { return true } else { return false } } } //assert existFiveBadCase(myList) == true assert notBreak(myList) == [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
hoge.find()
find 中で return trueするとそこで処理がとまる。
下のコードはまだ冗長だけど。数字の '5' を探す関数。
myList = (1..10) def doBreak(yourList) { def isExist = false yourList.find { list -> if(list == 5) { isExist = true return true } } return isExist } assert doBreak(myList) == true
0 件のコメント:
コメントを投稿