Issue #14724 has been updated by shevegen (Robert A. Heiler).


Here is the link to the discussion at the developer meeting or rather the
log written:

https://docs.google.com/document/d/e/2PACX-1vR2LdBE87iEcEsVuUUr0G2L6LxSPeGMg_0oeHeh0HYmX36iIa9zkWYlFHilH5D4I_RBJpQnr09yOZaE/pub

If I understood it correctly then the biggest objection is not onto the
suggested feature itself as-is, which I think nobody minds in itself, but
that code may be broken as a result.

In particular comments from nobu and koichi indicate this:

---

Nobu: that patch breaks existing code.
Nobu: shell.rb
Ko1: so this patch breaks DSLs that use < characters.

---
Usa: what about #< to return self instead?
Akr: ruby up to 0.51 behave like that.


The last statement by Akr is actually interesting to me - I have not used
ruby 0.51. Might be interesting to see how that was. :)

I personally am not affected either way (my ruby code is so simple in
general that I do not need to do too complicated checks), but for those
who consider the feature suggestion useful, perhaps you may have an 
idea how to approach this issue. If not for ruby 3.x, perhaps for 
ruby 4.x. :D (Could be archived and re-activated in this case.)


----------------------------------------
Feature #14724: chains of inequalities
https://bugs.ruby-lang.org/issues/14724#change-72169

* Author: gotoken (Kentaro Goto)
* Status: Open
* Priority: Normal
* Assignee: matz (Yukihiro Matsumoto)
* Target version: 
----------------------------------------
In mathematics, chain of inequations is a shorthand notation for the conjunction of several inequations involving common expressions. 

For example, `a < b <= c` for `a < b && b <= c`

Chain notation makes code clearer, in particular, long common expression cases will be so. E.g., 

```
cur.to_i - 2 <= timeval.tv_sec <= cur.to_i
```

is easier to read than

```
cur.to_i - 2 <= timeval.tv_sec && timeval.tv_sec <= cur.to_i
```

because in the latter case we have to verify whether `timeval.tv_sec` is common or not by eyes.

Current syntax allows but redefining builtin methods are considered not practical. So here I request as a new syntax for the chains.


### Use cases (applicable conjunctions)

lib/matrix.rb:
```ruby
    unless 0 <= column && column < column_count
```

lib/time.rb documents:
```ruby
    # block.  For example:
    #
    #     Time.parse(...) {|y| 0 <= y && y < 100 ? (y >= 69 ? y + 1900 : y + 2000) : y}
```

spec/ruby/optional/capi/bignum_spec.rb:
```ruby
  raise "Bignum#coerce returned Fixnum" if fixnum_min <= n && n <= fixnum_max
```

test/fiddle/test_import.rb:
```ruby
        assert(cur.to_i - 2 <= timeval.tv_sec && timeval.tv_sec <= cur.to_i)
```

tool/jisx0208.rb:
```ruby
        unless 0x8140 <= sjis && sjis <= 0xFCFC
```




-- 
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>