While both are interesting proposals, I'm more in favor of @1 (or $1, if an
argument has been made against it previously I apologize for missing it).
I've used `it` in RSpec (never in personal code). The idea that it's
affected by scope can lead up to sorrow and painful debug sessions.

Yaw

On Wed 5. Jun 2019 at 09:16, <eregontp / gmail.com> wrote:

> Issue #15897 has been updated by Eregon (Benoit Daloze).
>
>
> shugo (Shugo Maeda) wrote:
> > I don't like both proposals, but I prefer `@1` to `it` because `@1`
> looks ugly and may help prevent overuse.
>
> I think we should never purposefully introduce something ugly in the
> language.
> Preventing overuse is I think best done by limiting to a single argument
> (as argued in #15723).
>
> ----------------------------------------
> Feature #15897: `it` as a default block parameter
> https://bugs.ruby-lang.org/issues/15897#change-78357
>
> * Author: mame (Yusuke Endoh)
> * Status: Open
> * Priority: Normal
> * Assignee: matz (Yukihiro Matsumoto)
> * Target version:
> ----------------------------------------
> How about considering "it" as a keyword for the block parameter only if it
> is the form of a local varaible reference and if there is no variable named
> "it"?
>
> ```
> [1, 2, 3].map { it.to_s } #=> ["1", "2", "3"]
> ```
>
> If you are familiar with Ruby's parser, this explanation is more useful:
> NODE_VCALL to "it" is considered as a keyword.
>
> Examples:
>
> ```
> public def it(x = "X")
>   x
> end
>
> [1, 2, 3].map { it.to_s }    #=> ["1", "2", "3"]
> [1, 2, 3].map { self.it }    #=> ["X", "X", "X"] # a method call because
> of a receiver
> [1, 2, 3].map { it() }       #=> ["X", "X", "X"] # a method call because
> of parentheses
> [1, 2, 3].map { it "Y" }     #=> ["Y", "Y", "Y"] # a method call because
> of an argument
> [1, 2, 3].map { it="Y"; it } #=> ["Y", "Y", "Y"] # there is a variable
> named "it" in this scope
>
> it = "Z"
> [1, 2, 3].map { it.to_s }    #=> ["Z", "Z", "Z"] # there is a variable
> named "it" in this scope
> ```
>
> Pros:
> * it is the best word for the feature (according to @matsuda)
> * it is reasonably compatible; RSpec won't break because their "it"
> requires an argument
>
> Cons:
> * it actually brings incompatibility in some cases
> * it is somewhat fragile; "it" may refer a wrong variable
> * it makes the language semantics dirty
>
> Fortunately, it is easy to fix the incompatible programs: just replace
> `it` with `it()`.  (Off topic: it is similar to `super()`.)
> Just inserting an assignment to a variable "it" may affect another code.
> This is a bad news, but, IMO, a variable named "it" is not so often used.
> If this proposal is accepted, I guess people will gradually avoid the
> variable name "it" (like "p").
> The dirtiness is the most serious problem for me.  Thus, I don't like my
> own proposal so much, honestly.  But it would be much better than Perlish
> `@1`.  (Note: I don't propose the removal of `@1` in this ticket.  It is
> another topic.)  In any way, I'd like to hear your opinions.
>
>
> An experimental patch is attached.  The idea is inspired by
> @jeremyevans0's [proposal of `@`](
> https://bugs.ruby-lang.org/issues/15723#note-98).
>
>
> P.S. It would be easy to use `_` instead of `it`.  I'm unsure which is
> preferable.
>
> ---Files--------------------------------
> its.patch (4.92 KB)
>
>
> --
> 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>
>
(supressed text/html)
Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>