Well, it’s all in the subject, to me it looks like a parsing bug:
class MyRect
def intersects_good(other)
return (not ((other.x1 < self.x0 or self.x1 < other.x0) and
(other.y1 < self.y0 or self.y1 < other.y0)))
end
def intersects_bad(other)
return not ((other.x1 < self.x0 or self.x1 < other.x0) and
(other.y1 < self.y0 or self.y1 < other.y0))
end
end
foo> ruby -c myrect.rb
myrect.rb:8: syntax error, unexpected kNOT, expecting kEND
return not ((other.x1 < self.x0 or self.x1 < other.x0) and
^
Any comment? Is this known? Or just some hair in the Ruby grammar?
On 22/07/2007, at 5:35 PM, Good Night M. wrote:
(other.y1 < self.y0 or self.y1 < other.y0))
end
end
foo> ruby -c myrect.rb
myrect.rb:8: syntax error, unexpected kNOT, expecting kEND
return not ((other.x1 < self.x0 or self.x1 < other.x0) and
^
Any comment? Is this known? Or just some hair in the Ruby grammar?
There’s a difference between [not, and, or] and [!, &&, ||]
Not sure what it is, but I’ve found it better to use the latter.
Still, if you wrap the whole statement in another set of brackets
(like intersects_good) it will work.
def intersects_bad(other)
return (not ((other.x1 < self.x0 or self.x1 < other.x0) and
(other.y1 < self.y0 or self.y1 < other.y0)))
end
by the way, what’s the difference between the two methods? They
appear identical.
Cheers,
Dave
On Sun, 22 Jul 2007 16:51:26 +0900, Sharon P. wrote:
by the way, what’s the difference between the two methods? They appear
identical.
Thanks. The difference is just to point out what looks like
a bug; the parens shouldn’t make a difference. Look at
my other reply in this thread for elaboration.
Hi –
On Mon, 23 Jul 2007, Good Night M. wrote:
by the way, what’s the difference between the two methods? They appear
identical.
Thanks. The difference is just to point out what looks like
a bug; the parens shouldn’t make a difference. Look at
my other reply in this thread for elaboration.
I don’t think it’s a bug. Have a look at these examples:
def x; return 1 and puts “I’m gone!”; end
SyntaxError: compile error
(irb):3: void value expression
def x; 2 not 3; end
SyntaxError: compile error
(irb):5: syntax error, unexpected kNOT, expecting kEND
These both make sense. ‘and’ is right-associative, so you’re trying
to do something after having already returned, which doesn’t work.
And in general you can’t do “x not y”, which is what “return not …”
is read as.
David
I agree that
if not File.exists? “a”
do stuff
end
would be nice intuitively. I wish…
unknown wrote:
Hi –
On Mon, 23 Jul 2007, Good Night M. wrote:
by the way, what’s the difference between the two methods? They appear
identical.
Thanks. The difference is just to point out what looks like
a bug; the parens shouldn’t make a difference. Look at
my other reply in this thread for elaboration.
I don’t think it’s a bug. Have a look at these examples:
def x; return 1 and puts “I’m gone!”; end
SyntaxError: compile error
(irb):3: void value expression
def x; 2 not 3; end
SyntaxError: compile error
(irb):5: syntax error, unexpected kNOT, expecting kEND
These both make sense. ‘and’ is right-associative, so you’re trying
to do something after having already returned, which doesn’t work.
And in general you can’t do “x not y”, which is what “return not …”
is read as.
David
Le 24 juillet 2007 à 00:22, Roger P. a écrit :
I agree that
if not File.exists? “a”
do stuff
end
would be nice intuitively. I wish…
unless File.exists? “a”
do stuff
end
do stuff unless File.exists? “a”
Isn’t it even more intuitive ?
Fred