I know ruby doesn't support integer increment x or decrement x-- as C does. But when I use it, it doesn't do anything and doesn't throw an error either. Why?
Edit:
Sorry the code I actually found was using --x, which is slightly different, but the question remains: Why?
x = 10
while --x > 0
y = x
end
CodePudding user response:
Edit: to answer OP's comment about it actually being --x
In Ruby, operators are methods. --x, x , x==, etc all can do wildly different things. -- and are not themselves valid operators. They are combinations of operators.
In the case of your provided code, --x is the same as -(-x).
If x = 5, then -x == -5 and --x == 5.
---x would be -(-(-x)), and so on.
x-- is technically valid, depending on what the next line of code contains.
The following is valid, for example:
def my_func
x = 1
y = 10
x--
y
end
That would get interpreted as x - (-10). The result doesn't get assigned to any value, so the x-- line would appear to do nothing and the function would just return y.
You could even have nil on the last line of the function, and you wouldn't get a syntax error in some tools, but you would get a runtime error when the function is called.
x-- just on its own is not valid. It requires a Numeric argument to follow it. That argument can be on the next line.
CodePudding user response:
But when I use it, it doesn't do anything and doesn't throw an error either.
It does:
ruby -ce 'x--'
# -e:1: syntax error, unexpected end-of-input
x-- is not valid Ruby syntax.
