From: "nobu (Nobuyoshi Nakada) via ruby-core" Date: 2023-02-09T14:18:09+00:00 Subject: [ruby-core:112303] [Ruby master Bug#19426] Endless `Range#step` of object with `#succ` method does not work Issue #19426 has been updated by nobu (Nobuyoshi Nakada). Sorry that I merged the PR before seeing the reply. With the same object, `Range#each` works as expected. ```ruby (c..).each do |d| p d.i break if d.i > 3 end ``` This is because `c` is not compared against `nil` first. I think `#step` should behave like this. ---------------------------------------- Bug #19426: Endless `Range#step` of object with `#succ` method does not work https://bugs.ruby-lang.org/issues/19426#change-101739 * Author: nobu (Nobuyoshi Nakada) * Status: Closed * Priority: Normal * Backport: 2.7: REQUIRED, 3.0: REQUIRED, 3.1: REQUIRED, 3.2: REQUIRED ---------------------------------------- Consider this `c` object which hash `#succ` method. ```ruby c = Struct.new(:i) do def succ; self.class.new(i+1); end def <=>(other) i <=> other.i;end end.new(0) ``` This `Range#step` works. ```ruby (c..c.succ).step(1) do |d| p d.i # 0, 1 end ``` But it fails on an endless range. ```ruby (c..).step(1) do |d| p d.i break if d.i > 3 end ``` ``` -:3:in `<=>': undefined method `i' for nil:NilClass (NoMethodError) from -:10:in `step' from -:10:in `
' ``` -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/