[#82311] [Ruby trunk Bug#13794] Infinite loop of sched_yield — charlie@...
Issue #13794 has been reported by catphish (Charlie Smurthwaite).
4 messages
2017/08/09
[#82518] [Ruby trunk Feature#13618] [PATCH] auto fiber schedule for rb_wait_for_single_fd and rb_waitpid — mame@...
Issue #13618 has been updated by mame (Yusuke Endoh).
5 messages
2017/08/30
[#82552] Re: [Ruby trunk Feature#13618] [PATCH] auto fiber schedule for rb_wait_for_single_fd and rb_waitpid
— Eric Wong <normalperson@...>
2017/08/31
mame@ruby-lang.org wrote:
[#82756] Re: [Ruby trunk Feature#13618] [PATCH] auto fiber schedule for rb_wait_for_single_fd and rb_waitpid
— Eric Wrong <normalperson@...>
2017/09/12
Eric Wrong <normalperson@yhbt.net> wrote:
[ruby-core:82408] [Ruby trunk Bug#13815] p args
From:
matthew@...
Date:
2017-08-16 23:21:17 UTC
List:
ruby-core #82408
Issue #13815 has been updated by phluid61 (Matthew Kerwin).
opti (Andreas Opti) wrote:
> >If you want the same behavior, you need to use parentheses:
> >3.times { p((x,y = x+1,y+1)) }
>
> # ok, but also with ((...)) [most people] would assume its meaning is (x, y=x+1, y+1)...
>
Most people wouldn't write it in the first place.
You *could*, if you really, really wanted to do a multiple assignment **and** capture the result into an array **and** `p` the array, all in one step.
I don't think it's a parser issue, though; the parser does a logical thing at each step. It's the author who's doing something weird.
>
> *Other example:
> p(x+=1,x+=1) # ok
> p (x+=1,x+=1) # error
Well, yeah, but this is well known, well defined ruby. `p(x)` is unambiguous function call; `p (x)` is a parenthesised `(x)` being passed as the first positional argument to `p`.
It might help illustrate by replacing the `p` function call with, say, an assignment:
~~~
#p(x)
a = x
#p((x))
a = (x)
#p x
a = x
#p (x)
a = (x)
#p (x+=1,x+=1)
a = (x+=1,x+=1) #???
#p ((x,y)=[x+1,y+1])
a = ((x,y)=[x+1,y+1])
# Note: multiple assignment returns the whole array, so a == [x,y]
# This can also be written: a = (x,y=[x+1,y+1]) or: a = (x,y=x+1,y+1)
#p((x,y)=[x+1,y+1])
a = (x,y)=[x+1,y+1] #??? This part doesn't make sense: a = (x,y)
~~~
>
> So the parsing of p(Args) might be improved...
I don't like saying this, but I think this is a case where you have to get familiar with ruby's syntax. It all makes sense once you understand how the parser sees what you've written.
----------------------------------------
Bug #13815: p args
https://bugs.ruby-lang.org/issues/13815#change-66208
* Author: opti (Andreas Opti)
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
* ruby -v: 2.5.x
* Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
x=y=0 # outside defined vars!
3.times {|i| x,y=x+1,y+1 } # as expected: x==3
3.times {|i| p(x,y=x+1,y+1) } # NOT as expected: x not changed!
# x,y are the same vars as above. p shoudn't have any effect on scope
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>