リストから任意のクラスのインスタンスを作成する

プログラム中で得た値を元にインスタンスを生成する場合とか、結構便利かも。

class Person {
  def name, age
  Person (name, age) {
    this.name = name
    this.age = age
  }
}
p = ['foo', 20] as Person // ===> Person@199939
p.name                    // ===> foo
p.age                     // ===> 20


Groovy in Action の p186 によると、以下のように、アサインメント時に暗黙的にインスタンス生成をしてくれるという仕組みもあるとのこと。
でも、今のおいらの環境ではうまくいきません o...rz

Person p = ['bar', 30]   // ===> Person@159e154
p.name

groovySh 上で上記を実行すると、p.name のところで下記のエラーがでます。

ERROR groovy.lang.MissingPropertyException: No such property: p for class: groovysh_evaluate
        at groovysh_evaluate.run (groovysh_evaluate:1)
        ...

う〜む、何でだろ?
id:ruzia さんができたというので、おいらももう一回やってみたところ、できましたw

groovy> class Person {
groovy>   def name, age
groovy>   Person (name, age) {
groovy>     this.name = name
groovy>     this.age = age
groovy>   }
groovy> }
groovy> Person p = ['bar', 30]
groovy> p.name

Result: "bar"