LoginSignup
1
1

More than 5 years have passed since last update.

Groovyのリスト表現の落とし穴?

Last updated at Posted at 2012-11-20

最近のLL言語だと、リストの表現として

[1..4]

のような形で、「1から始まり、4まで続くリスト」を表現できると思います。
Groovyでも当然のようにこの書き方が出来るわけですね。

listExp.groovy
def list=[1..4]

で、問題なのは、

Haskellの場合

ghci_out
Prelude> let l=[1..4]
Prelude> let m=[1,2,3,4]
Prelude> l==m
True

とごく予想通りの結果になるのに対して、Groovyでは

listExpError.groovy
assert [1..4]==[1,2,3,4]
             |
             false

とAssertion failedを起こしてしまいます。

これは落とし穴だよね。

(追記)
どうしてこうなるのか、というと上記の用にHaskellで見慣れている

[1..4]

という表記だとGroovyの場合

assert [[1,2,3,4]]==[1..4]

となっているわけです。
つまり、角括弧なしの

..

で既に[1,2,3,4]が表現されているわけですね。

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1