プロパティが .'@value' と .@value のように異なる方法でアクセスされているのを見てきました。違いはなんですか?
ここで正確に何を引用しますか?
どこで見た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
何が起こっているのかがより明確になるので...