[#58149] [ruby-trunk - Feature #9076][Open] New one-argument block syntax: &. — "asterite (Ary Borenszweig)" <ary@...>

23 messages 2013/11/04

[#58176] [ruby-trunk - Bug #9082][Open] popen3 hangs when stderr gets lots of output — "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>

15 messages 2013/11/05

[#58207] [ruby-trunk - Bug #9089][Open] rb_fix2uint no longer raises a RangeError when given negative values — "NoKarma (Arthur Schreiber)" <schreiber.arthur@...>

9 messages 2013/11/06

[#58243] [ruby-trunk - Feature #9098][Open] Indent heredoc against the left margin by default when "indented closing identifier" is turned on. — "sikachu (Prem Sichanugrist)" <s@...>

24 messages 2013/11/09

[#58306] [ruby-trunk - Bug #9106][Open] 'gem install' doesn't copy .so files of ext libs — "tagomoris (Satoshi TAGOMORI)" <tagomoris@...>

15 messages 2013/11/13

[#58324] [ruby-trunk - Feature #9108][Open] Hash sub-selections — "wardrop (Tom Wardrop)" <tom@...>

28 messages 2013/11/14

[#58342] [ruby-trunk - Feature #9112][Open] Make module lookup more dynamic (Including modules into a module after it has already been included) — "PragTob (Tobias Pfeiffer)" <pragtob@...>

16 messages 2013/11/14

[#58350] [ruby-trunk - Feature #9113][Open] Ship Ruby for Linux with jemalloc out-of-the-box — "sam.saffron (Sam Saffron)" <sam.saffron@...>

59 messages 2013/11/15

[#58374] [ruby-trunk - Bug #9115][Open] Logger traps all exceptions; breaks Timeout — "cphoenix (Chris Phoenix)" <cphoenix@...>

10 messages 2013/11/16

[#58375] [ruby-trunk - Feature #9116][Open] String#rsplit missing — "artagnon (Ramkumar Ramachandra)" <artagnon@...>

12 messages 2013/11/16

[#58396] [ruby-trunk - Bug #9121][Open] [PATCH] Remove rbtree implementation of SortedSet due to performance regression — "xshay (Xavier Shay)" <contact@...>

15 messages 2013/11/18

[#58404] [ruby-trunk - Feature #9123][Open] Make Numeric#nonzero? behavior consistent with Numeric#zero? — "sferik (Erik Michaels-Ober)" <sferik@...>

40 messages 2013/11/18

[#58411] [ruby-trunk - Bug #9124][Open] TestSocket errors in test-all on Arch 64-bit — "jonforums (Jon Forums)" <redmine@...>

14 messages 2013/11/18

[#58438] [ruby-trunk - Bug #9129][Open] Regression in support for IPv6 literals in URIs with Net::HTTP — "kallistec (Daniel DeLeo)" <dan@...>

11 messages 2013/11/19

[#58545] [ruby-trunk - Feature #9145][Open] Queue#pop(true) return nil if empty instead of raising ThreadError — "jsc (Justin Collins)" <redmine@...>

9 messages 2013/11/24

[#58653] [ruby-trunk - Bug #9170][Open] Math.sqrt returns different types when mathn is included; breaks various gems - this bug can be reproduced in Ruby 1.8 as well — "kranzky (Jason Hutchens)" <JasonHutchens@...>

7 messages 2013/11/28

[ruby-core:58154] Re: [ruby-trunk - Feature #9076] New one-argument block syntax: &.

From: Fuad Saud <fuadksd@...>
Date: 2013-11-04 20:26:31 UTC
List: ruby-core #58154
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


In This Thread