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>