Почему два эквивалентных свойства не равны в Groovy

Пожалуйста, взгляните на этот простой код:

String.metaClass {
  getA = {delegate <<= delegate}
}

assert 'a'.a == 'a'.a
Result: Assertion failed: 
    assert 'a'.a == 'a'.a
               | |      |
               | false  aa
               aa

Почему результат FALSE?

Я работаю над Groovy 2.4.7 в Windows 7 SP1.


person Axe    schedule 25.08.2016    source источник


Ответы (1)


LeftShift для строки в Groovy генерирует StringBuffer (документы)

Итак, 'a'.a == 'a'.a пытается сделать равными два StringBuffers.

Вы не можете сделать это с StringBuffer, так как метод equals не перегружен и просто проверяет, являются одним и тем же экземпляром

person tim_yates    schedule 25.08.2016
comment
Есть ! Таким образом, это будет { (делегат ‹‹= делегат) как String } Большое спасибо! - person Axe; 25.08.2016
comment
Или просто delegate + delegate - person tim_yates; 25.08.2016