From: keystonelemur@... Date: 2018-05-01T20:15:04+00:00 Subject: [ruby-core:86807] [Ruby trunk Feature#14724] chains of inequalities Issue #14724 has been updated by baweaver (Brandon Weaver). If it works for classes you might have just allowed for some fun stuff like this: ```ruby class Proc;def >=(o)->*as{o[self[*as]]}end;end; a2=->a{a+2};m2=->a{a*2}; [1, 2, 3].map(& a2 >= m2 >= proc { |v| v * 20 } ) ``` Though with compose it'd allow `>>` already. Nifty thing is `to_proc` as `&` evaluates after infix operators, allowing this type of thing. +1 for beginner intuitive use, expert brevity, and silly fp hacker shenanigans ---------------------------------------- Feature #14724: chains of inequalities https://bugs.ruby-lang.org/issues/14724#change-71769 * 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: