XOR на char не работает на groovy - PullRequest
3 голосов
/ 12 декабря 2011

Почему это не работает с groovy?

  ('a' as char) ^ ('b' as char)​

Это повышает

  groovy.lang.MissingMethodException: No signature of method: java.lang.Character.xor() is applicable for argument types: (java.lang.Character) values: [b]
  Possible solutions: div(java.lang.Character), any(), any(groovy.lang.Closure), plus(java.lang.Character), is(java.lang.Object), use([Ljava.lang.Object;)
at Script1.run(Script1.groovy:2)

Насколько я знаю, это нарушает совместимый источник с Java.

1 Ответ

5 голосов
/ 12 декабря 2011

Работает с Groovy 1.8.4:

println( ('a' as char) ^ ('b' as char) )

печать

3

В Groovy довольно много мест, где источник несовместим с Java. Список можно найти здесь , также есть такие вещи, как отсутствие цикла do...while и т.д ...

Редактировать

Йохен Теодору, технический руководитель Groovy Project ответил на почту в списке :

на данный момент «правильный» путь -

println ((«a» как int) ^ («b» как int))

и он должен все еще печатать 3. По какой причине он иногда работает и иногда нет ... я думаю это потому что я случайно реализовал что за примитивные оптимизации. Это означает, что вы получите это позже Версии 1.8, потому что раньше это не было реализовано. И это означает, что он работает, только если они включены, что имеет место только в определенных ситуации.

Редактировать # 2

Это похоже на проблему, которая проявляется только в определенных реализациях JVM. Таким образом, Я опубликовал проблему в Groovy Jira , поэтому, надеюсь, будущие версии Groovy немного сгладят различия: -)

...