From: "akr (Akira Tanaka) via ruby-core" Date: 2023-09-27T14:37:21+00:00 Subject: [ruby-core:114902] [Ruby master Feature#13933] Add Range#empty? Issue #13933 has been updated by akr (Akira Tanaka). Dan0042 (Daniel DeLorme) wrote in #note-13: > akr (Akira Tanaka) wrote in #note-12: > > From experience with `Float::NAN`, I think it is not a good idea to expand such objects. > > It makes the behavior of `Array#<=>` inconsistent. > > I agree but I think this is a bit different from what I was talking about. Float::NAN is a float that is not comparable with other floats. This is not the same case as a value that is not comparable with anything else. > Float::NAN is not comparable with anything else, not only floats. ``` % ruby -e 'p Float::NAN <=> "foo"' nil % ruby -e 'p Float::NAN <=> []' nil ``` > > > Or maybe we can define a range "r" as empty if `r.begin.nil? and r.exclude_end? and r.end.respond_to?(:empty?) and r.end.empty?` > > > > You ignored the user-defined classes I mentioned. > > A user may define a class with a minimum value. > > The minimum value may not have `empty?` method. > > How do you define which is the minimum value? I suggested the above as a *possible* way to define this minimum value. So a custom class would need to have #empty? that returns true in order to define "this is the minimum". But it was just a suggestion. Or maybe each class could have a MINIMUM constant like `String::MINIMUM = ""`, etc. I described an idea in https://bugs.ruby-lang.org/issues/19839#note-18 : `minimum?` method. I feel `empty?` can sometimes be a wrong name. `minimum?` represent the property directly. > More importantly, I think that `(...minimum).empty?` is such an edge case of an edge case that it's not worth worrying too much. Are you suggesting that `Range#empty?` should not exist just because it's not possible to perfectly handle this extreme edge case for every possible class? Would it really be so bad if it returned `true` for user-defined classes? I think a bug report like my comment will coming someday. Ruby developers (especially matz) need to respond to it. So, we compare the usefulness of the method and the difficulties of responding to the bug report. Also, this problem can be expanded if we introduce `Range#exclude_begin?` (with neko operator). https://bugs.ruby-lang.org/issues/12133 In that case, we need `maximum?` as well. But we also need a method to check the existence between two objects because `[1] ^..^ [1, ""]` is empty (no objects between `[1]` and `[1, ""]`). ---------------------------------------- Feature #13933: Add Range#empty? https://bugs.ruby-lang.org/issues/13933#change-104767 * Author: ted (Ted Johansson) * Status: Open * Priority: Normal ---------------------------------------- Range already responds to #size. It would be nice if it also responded to predicate #empty? :-) -- 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/