From: shevegen@... Date: 2018-05-18T22:44:30+00:00 Subject: [ruby-core:87180] [Ruby trunk Feature#14724] chains of inequalities 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: