[#122369] [Ruby Bug#21392] Data classes do not allow overriding #inspect — "austin (Austin Ziegler) via ruby-core" <ruby-core@...>

Issue #21392 has been reported by austin (Austin Ziegler).

8 messages 2025/06/01

[#122411] [Ruby Bug#21396] Set#initialize should call Set#add on items passed in — "tenderlovemaking (Aaron Patterson) via ruby-core" <ruby-core@...>

Issue #21396 has been reported by tenderlovemaking (Aaron Patterson).

12 messages 2025/06/04

[#122506] [Ruby Feature#21435] Kernel#optional as a conditional #then — "Alexander.Senko (Alexander Senko) via ruby-core" <ruby-core@...>

SXNzdWUgIzIxNDM1IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IEFsZXhhbmRlci5TZW5rbyAoQWxleGFu

11 messages 2025/06/10

[#122557] [Ruby Bug#21445] [BUG] push_mark_stack() called for broken object raised since cd9f447be247478d2eb3da985295735cce20cb23 — "yahonda (Yasuo Honda) via ruby-core" <ruby-core@...>

Issue #21445 has been reported by yahonda (Yasuo Honda).

10 messages 2025/06/19

[#122615] [Ruby Misc#21458] Test 'make install'? — "MSP-Greg (Greg L) via ruby-core" <ruby-core@...>

Issue #21458 has been reported by MSP-Greg (Greg L).

11 messages 2025/06/28

[ruby-core:122384] [Ruby Bug#21392] Data classes do not allow overriding #inspect

From: "austin (Austin Ziegler) via ruby-core" <ruby-core@...>
Date: 2025-06-03 02:14:59 UTC
List: ruby-core #122384
Issue #21392 has been updated by austin (Austin Ziegler).


nobu (Nobuyoshi Nakada) wrote in #note-5:
> austin (Austin Ziegler) wrote in #note-3:
> > You are correct (and I should have known better; I have unit tests proving this).
> 
> What unit tests?

In my feature branch where I'm converting to Data classes.

> 
> You can define `pretty_print` for IRB.
> 
> ```ruby
>     def pretty_print(q)
>       q.text "CIELAB"
>       q.breakable
>       q.group 2, "[", "]" do
>         q.text "%.4f%%" % l
>         q.breakable
>         q.text "%.4f" % a
>         q.breakable
>         q.text "%.4f" % b
>       end
>     end
> ```

This is the problem, of course, with having maintained something backwards compatible (Color is currently _nominally_ valid for 1.8) as long as I have. I wasn't aware that there was a new call for defining a pretty print, because IRB *used* to fall back to `inspect`. However, `Data` classes presumably define a pretty printer and overrides `#inspect` within IRB.

This is good to know, and I'll define a `pretty_print` method.

This can be closed.

----------------------------------------
Bug #21392: Data classes do not allow overriding #inspect
https://bugs.ruby-lang.org/issues/21392#change-113532

* Author: austin (Austin Ziegler)
* Status: Assigned
* Assignee: ima1zumi (Mari Imaizumi)
* ruby -v: 3.4.4
* Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
I'm preparing a new version of Color and I have decided to make all of the colour classes Data classes. However, it does not appear that `#inspect` can be overridden:


```ruby
module Color
  CIELAB = Data.define(:l, :a, :b) do
    def inspect
      "CIELAB [%.4f%% %.4f %.4f]" % [l, a, b]
    end
  end
end

p Color::CIELAB[1,2,3]
# Expected => CIELAB[1.000% 2.000 3.000]
# Actual #<data Color::CIELAB l=10, a=-125.0, b=20.5>
```

This feels like it should be permitted.



-- 
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/lists/ruby-core.ml.ruby-lang.org/


In This Thread