1

プロパティが .'@value' と .@value のように異なる方法でアクセスされているのを見てきました。違いはなんですか?

ここで正確に何を引用しますか?

4

1 に答える 1

3

どこで見たo.'@value'

呼び出すo.@valueと、オブジェクトの getter が無視され、valueプロパティが直接取得されます。

したがって、呼び出すo.'@value'と、呼び出されたプロパティが取得されます@value(Groovy では、クラスの有効なプロパティ名ではありません)。

例から編集

ああ、それは説明が不十分な例です。xml を丸呑みするとき、@attrフォームは特別なフォームであり、ノードの属性にアクセスします。

groovy を使用すると、次のことが可能になります。

def a = [ 'a', 'b', 'c' ]

// Will call getBytes() on every string in the list
assert a*.bytes == [[97], [98], [99]]

// So will this!
assert a.bytes == [[97], [98], [99]]

2 番目の でわかるようにassert、スプレッド ドット演算子はありませんが、*.それでも機能getBytesし、リスト内のすべての要素を呼び出します。

リンク先のxmlの例では、次のことを行っています。

records.car.findAll{ it.country.text() =~ '.*s.*a.*' }.'@make'

そのため、リスト内の各項目で「make」属性を呼び出しています。引用符なしの場合:

records.car.findAll{ it.country.text() =~ '.*s.*a.*' }.@make

ArrayListのプロパティを取得しようとしますmake(これは明らかに存在しません)。

混乱の少ない書き方は次のようになります。

records.car.findAll{ it.country.text() =~ '.*s.*a.*' }*.@make

何が起こっているのかがより明確になるので...

于 2013-06-20T08:04:20.673 に答える