KotlinでXOR演算子は、機能やバグですか?

emka86:

私は長年のJava開発してきたし、最近私は非常にKotlinでの思わぬものを発見しました。Javaであり、めったに使われない論理演算子ある^ XOR時にはそれは便利です。例えば:、唯一の2つの数のがゼロより大きい場合、あなたはイースリー確認することができます。

&& AND演算子およびいくつかの変数ab、それはそれのようになります。

boolean valid = (a > 0 && b <= 0) || (a <= 0 && b > 0);

それはイースリーで達成することができます^ XOR

boolean valid = a > 0 ^ b > 0;

さて、Kotlineに我々は使用しない^ようXORが、ちょうどxorそのようなKotlinのルックスで、同じコード:

val valid = a > 0 xor b > 0;

Kotlineでこのコードを与えるので、ここで問題が付属しています... コンパイルエラーどうして?Javaですべての論理演算子は(あるため&,&&,|,||,^)(関係演算子よりも低い優先順位を得ました>, >=, <, <=, ==, !=)。Koltinで同じですが、それがないためにのように見えますxorだから、この道を行きます:

  1. a > 0 ブール値を与えます
  2. boolean xor b > 0:最初にevealuated boolean xor bありませんb > 0
  3. そして最後に、我々は言ったコンパイルエラーを得ました: The integer literal does not conform to the expected type Boolean

あなたはここにこの状況を確認することができます:XORはうまく機能していません

1つの余分ケース:あなたはこの1と思われる場合:a > 0 xor (b > 0)作品...よく、ありません。別のコンパイルエラー:Type mismatch: inferred type is Boolean but Int was expected

誰も私には、このようなロジックのためのいくつかのpurpouseがあるか、それはKotlin言語でちょうどバグです説明できますか?

描かれたアライグマ:

xorある 中置関数が。中置関数呼び出しは、比較よりも高い優先順位を持っています。

val valid = a > 0 xor b > 0 同じです val valid = a > (0 xor b) > 0

  1. (0 xor b) Int値を与えます
  2. a > (0 xor b) ブール値を与えます
  3. そしてそれは、ブールとのInt(との比較になり"step 2 Boolean result" > 0)、しかし、あなたはintであり、ブールを比較することはできません

正しいバージョン:

val valid = (a > 0) xor (b > 0)

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=6403&siteId=1