[ruby-core:74850] Re: [Ruby trunk Feature#12262] Anti-loop

From: Brandon Weaver <keystonelemur@...>
Date: 2016-04-08 07:26:07 UTC
List: ruby-core #74850
[1].each { puts 'looping'; sleep 1; redo }

On Fri, Apr 8, 2016 at 12:21 AM, <sawadatsuyoshi@gmail.com> wrote:

> Issue #12262 has been reported by Tsuyoshi Sawada.
>
> ----------------------------------------
> Feature #12262: Anti-loop
> https://bugs.ruby-lang.org/issues/12262
>
> * Author: Tsuyoshi Sawada
> * Status: Open
> * Priority: Normal
> * Assignee:
> ----------------------------------------
> The `loop` method continues by default, and requires the keyword `break`
> to escape. This is good when the continuing cases are the norm and the
> escaping cases are exceptional:
>
> ~~~RUBY
> loop do
>   ...
>   if ...
>     ...
>   elsif ...
>     ...
>   elsif ...
>     ...
>     break # breaks on exceptional cases
>   elsif ...
>     ...
>   else
>     ...
>   end
> end
> ~~~
>
> But when the continuing cases are exceptional and the escaping cases are
> the norm, the construction requires a lot of `break`, and it becomes
> cumbersome:
>
> ~~~RUBY
> loop do
>   ...
>   if ...
>     ...
>     break # lot of breaks
>   elsif ...
>     ...
>     break # lot of breaks
>   elsif ...
>     ...
>     break # lot of breaks
>   elsif ...
>     ...
>   else
>     ...
>     break # lot of breaks
>   end
> end
> ~~~
>
> I actually see this use case a lot when user input is asked with
> validation on a command line script.
>
> I request a `loop`-like method that works in the opposite way to `loop`,
> that is, it escapes (i.e., runs only once) by default, and requires a
> keyword to continue (perhaps `next`). The second code above would then be
> written like:
>
> ~~~RUBY
> some_loop_like_method do
>   ...
>   if ...
>     ...
>   elsif ...
>     ...
>   elsif ...
>     ...
>   elsif ...
>     ...
>     next # continues on exceptional cases
>   else
>     ...
>   end
> end
> ~~~
>
>
>
>
> --
> 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>
>

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next