groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Winnebeck, Jason" <Jason.Winneb...@windstream.com>
Subject RE: precedence rules for power operator vs -, +, ++, --
Date Mon, 08 Jun 2015 13:02:16 GMT
If this isn't a clear cut fix then you might want consider leaving it as it is for backwards
compatibility. Groovy already has enough issues with breaking changes. At first it looks reasonable
that unary - should have precedence over everything but (), but taking the power of a negative
number is not normally a sensible thing to do since it only works when the right hand side
is an integer and half the time the result is positive. So, in my mind there are arguments
for both sides, and then when applied to something as critical as source compatibility, it
really lends to keeping existing behavior, in my opinion.

Jason

-----Original Message-----
From: Paul King [mailto:paulk@asert.com.au] 
Sent: Sunday, June 07, 2015 10:26 AM
To: users@groovy.incubator.apache.org
Subject: Re: precedence rules for power operator vs -, +, ++, --


OK, looks like there is precedence in both directions:

http://en.wikipedia.org/wiki/Order_of_operations#Exceptions


On 7/06/2015 11:48 PM, Jochen Theodorou wrote:
> "-8 - 1"
>
> is in all languages I tests -9. That means Pyhton, Lua, Java, Ruby, QBasic, Javascript,
Go. And that in general independent of spacing.
>
> bye blackdrag
>
> Am 07.06.2015 13:50, schrieb Paul King:
>>
>> What do lua/python/ruby return for "-8 - 1"?
>>
>> On 7/06/2015 8:40 PM, Jochen Theodorou wrote:
>>> Am 06.06.2015 13:08, schrieb Paul King:
>>> [...]
>>>> def x = 5
>>>> assert -x ** 2 == -25  // treated as -(x ** 2) assert --x ** 2 == 
>>>> 24  // treated as --(x ** 2)
>>>>
>>>> This behavior is different to the other operators and different to 
>>>> what the comments in the grammar describe as the intended behavior 
>>>> but the order of two rules was presumably accidentally reversed in the grammar.
>>>>
>>>> After the change, the following executes:
>>>>
>>>> def x = 5
>>>> assert -x ** 2 == 25   // treated as (-x) ** 2
>>>> assert --x ** 2 == 16  // treated as (--x) ** 2
>>>
>>> I just checked Ruby and Python and there -2**4 will return -16, same 
>>> for -2^4 in Lua. So now I am wondering if that is the right thing 
>>> for unary minus
>>>
>>> bye blackdrag
>>>
>>
>>
>> ---
>> This email has been checked for viruses by Avast antivirus software.
>> https://www.avast.com/antivirus
>>
>
>


---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus


----------------------------------------------------------------------
This email message and any attachments are for the sole use of the intended recipient(s).
Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the
intended recipient, please contact the sender by reply email and destroy all copies of the
original message and any attachments.
Mime
View raw message