2011-10-30 7 views
4

私はこの質問hereを見ました。その答えだと言う者の一部としてGroovyはJavaとは異なった動作をしています。このコードでは

Integer i3 = (Integer) -128; /*** Doesn't compile ***/ 

The compiler interprets the - as the two-arg minus operator, i.e. it's trying to subtract 128 from some other number named Integer, but there's no such variable in scope 

答えは私のために正しく見えるこの質問の問題は、このラインです。行のも、このコードはコンパイル

Integer i3 = (Integer) -128; /*** compiles!!! ***/ 

Integer i3 = (Integer) -(128); /*** compiles ***/ 

どのようにGroovyのは、この操作を実行するん今グルーヴィーで、私は前のような同じコードを試してみましたか?すべてのJVM言語はこれを行いますか? Groovyの場合、シーンの背後で何が起こっているのですか?

これはJavaルールを破ることはありませんか?混乱したビット。

は、参考のために、私は事前に作業Groovyのコードにhere

感謝をタグ付けしています。グルーヴィー1.8

+2

Groovyは、(やや)相違する文法を持つことで、「その操作を実行します」。 –

答えて

4

0
Integer i3 = (Integer) -128; 
println i3 

コンパイルして実行GroovyはJavaのではありません。

Javaの仕様に従う必要はありません。この場合は...しません。

明快に編集:私はあなたが混乱していると思うのは、これらが2つの異なる言語であることを理解していないということです。 GroovyコンパイラとJavaコンパイラはどちらもソースコードのバイトコードを出力します。ソースコードはJVM(Java Virtual Machine)上で実行されます。 JLS(Java Language Specification)は、Java言語にのみ適用されます。 Groovyはそれを遵守する必要はありません。

+1

彼の質問を再読します。彼は* Java *でコンパイルしないと述べています。彼は、JavaとGroovyは同じものではないことを理解していません。 –

+0

oops。私は訂正した。 javaではコンパイルされません。 –

+1

ほとんどの人*スタンド*修正:-) –

1

コードのマイナス記号を解釈する方法は、言語定義を実装するコンパイラの関数です。実際にコードが実行されるランタイムシステム(この場合はJVM)にはまったく関係しません。したがって、異なる言語では、同じシンボル/キーワードなどが異なる方法で動作する可能性があります。

関連する問題