From: Fuad Saud Date: 2013-11-04T18:26:31-02:00 Subject: [ruby-core:58154] Re: [ruby-trunk - Feature #9076] New one-argument block syntax: &. --527802f7_2ae8944a_7322 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Introducing both syntaxes indeed is a bit confusing. I don=E2=80=99t thin= k =5B1, 10, 100=5D.map &.to=5Fs.length is much better than =5B1, 10, 100=5D.map =7B =7Ci=7C i.to=5Fs.length =7D I think the latter is clearer. I'm fond of having some sugar for position= al parameter access (like % in clojure or & in elixir), though. =20 -- =20 =46uad Saud Sent with Sparrow (http://www.sparrowmailapp.com/=3Fsig) On Monday, November 4, 2013 at 1:57 PM, shevegen (markus heiler) wrote: > =20 > Issue =239076 has been updated by shevegen (markus heiler). > =20 > =20 > Note that if &: would be removed at the same time and &. added I would = not mind it that much. You could use & as a reference to a global object,= just similar to how =241 or =242 is automagically set for regexes. But t= o keep two different syntaxes for semi-similar issues is very bad. > ---------------------------------------- > =46eature =239076: New one-argument block syntax: &. > https://bugs.ruby-lang.org/issues/9076=23change-42742 > =20 > Author: asterite (Ary Borenszweig) > Status: Open > Priority: Normal > Assignee: =20 > Category: core > Target version: current: 2.1.0 > =20 > =20 > Hello, > =20 > I'd like to introduce a new syntax for blocks that have one argument. > =20 > Currently you can do this: > =20 > =5B1, 2, 3=5D.map &:to=5Fs > =20 > With the proposed syntax this will be written as: > =20 > =5B1, 2, 3=5D.map &.to=5Fs > =20 > Instead of =22:=22 we use a =22.=22. > =20 > The idea is that this new syntax is just syntax sugar that is expanded = by the parser to this: > =20 > =5B1, 2, 3=5D.map =7B =7Carg=7C arg.to=5Fs =7D > =20 > This new syntax allows passing arguments: > =20 > =5B1, 2, 3, 4=5D.map &.to=5Fs(2) =23=3D> =5B=221=22, =2210=22, =2211=22= , =22100=22=5D > =20 > It also allows chaining calls: > =20 > =5B1, 10, 100=5D.map &.to=5Fs.length =23=3D> =5B1, 2, 3=5D > =20 > You can also use another block: > =20 > =5B=5B1, -2=5D, =5B-3, -4=5D=5D.map &.map &.abs =23=3D> =5B=5B1, 2=5D, = =5B3, 4=5D=5D > =20 > Pros: > - Doesn't conflict with any existing syntax, because that now gives a s= yntax error, so it is available. > - Allows passing arguments and chaining calls > - It's *fast*: it's just syntax sugar. The =22&:to=5Fs=22 is slower bec= ause the to=5Fproc method is invoked, you have a cache of procs, etc. > - It looks ok (in my opinion) and allows very nice functional code (lik= e the last example). > =20 > Cons: > - Only supports one (implicit) argument. But this is the same limitatio= n of =22&:to=5Fs=22. If you want more than one argument, use the traditio= nal block syntax. > - It's a new syntax, so users need to learn it. But to defend this poin= t, users right now need to understand the &:to=5Fs syntax, which is hard = to explain (this calls the =22to=5Fproc=22 method of Symbol, which create= s a block... vs. =22it's just syntax sugar for=22) > =20 > What do you think=3F > =20 > We are using this syntax in a new language we are doing, Crystal, which= has a syntax very similar to Ruby, and so far we think it's nice, simple= and powerful. You can read more about it here: http://crystal-lang.org/2= 013/09/15/to-proc.html > =20 > =20 > -- =20 > http://bugs.ruby-lang.org/ > =20 > =20 --527802f7_2ae8944a_7322 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline
Introducing both syntaxes indeed is a bit confusing. I don=E2=80=99t thi= nk

=5B1, 10, 100=5D.map &.to=5Fs.length
=
is much better than

=5B1, 10, 100= =5D.map =7B =7Ci=7C i.to=5Fs.length =7D

I think = the latter is clearer. I'm fond of having some sugar for positional param= eter access (like % in clojure or & in elixir), though.

-- 
=46uad Saud
Sent with S= parrow

=20

On Monday, November 4,= 2013 at 1:57 PM, shevegen (markus heiler) wrote:


Issue =239076 has= been updated by shevegen (markus heiler).


<= /div>
Note that if &: would be removed at the same time and &= . added I would not mind it that much. You could use & as a reference= to a global object, just similar to how =241 or =242 is automagically se= t for regexes. But to keep two different syntaxes for semi-similar issues= is very bad.
----------------------------------------
=46eature =239076: New one-argument block syntax: &.

Author: asterite (Ary Borenszweig)
Status: Open
Pr= iority: Normal
Assignee:
Category: core
Ta= rget version: current: 2.1.0


Hell= o,

I'd like to introduce a new syntax for blocks= that have one argument.

Currently you can do th= is:

=5B1, 2, 3=5D.map &:to=5Fs
With the proposed syntax this will be written as:
<= br>
=5B1, 2, 3=5D.map &.to=5Fs

Ins= tead of =22:=22 we use a =22.=22.

The idea is th= at this new syntax is just syntax sugar that is expanded by the parser to= this:

=5B1, 2, 3=5D.map =7B =7Carg=7C arg.to=5F= s =7D

This new syntax allows passing arguments:<= /div>

=5B1, 2, 3, 4=5D.map &.to=5Fs(2) =23=3D> = =5B=221=22, =2210=22, =2211=22, =22100=22=5D

It = also allows chaining calls:

=5B1, 10, 100=5D.map= &.to=5Fs.length =23=3D> =5B1, 2, 3=5D

Yo= u can also use another block:

=5B=5B1, -2=5D, =5B= -3, -4=5D=5D.map &.map &.abs =23=3D> =5B=5B1, 2=5D, =5B3, 4=5D= =5D

Pros:
- Doesn't conflict with any = existing syntax, because that now gives a syntax error, so it is availabl= e.
- Allows passing arguments and chaining calls
- It= 's *fast*: it's just syntax sugar. The =22&:to=5Fs=22 is slower becau= se the to=5Fproc method is invoked, you have a cache of procs, etc.
=
- It looks ok (in my opinion) and allows very nice functional code (= like the last example).

Cons:
- Only s= upports one (implicit) argument. But this is the same limitation of =22&a= mp;:to=5Fs=22. If you want more than one argument, use the traditional bl= ock syntax.
- It's a new syntax, so users need to learn it. But= to defend this point, users right now need to understand the &:to=5F= s syntax, which is hard to explain (this calls the =22to=5Fproc=22 method= of Symbol, which creates a block... vs. =22it's just syntax sugar for=22= )

What do you think=3F

= We are using this syntax in a new language we are doing, Crystal, which h= as a syntax very similar to Ruby, and so far we think it's nice, simple a= nd powerful. You can read more about it here: http://crystal-lang.org/2013/09/15/t= o-proc.html


--
=20 =20 =20 =20
=20

--527802f7_2ae8944a_7322--