ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:122369] [Ruby Bug#21392] Data classes do not allow overriding #inspect
@ 2025-06-01 23:32 austin (Austin Ziegler) via ruby-core
  2025-06-02  0:34 ` [ruby-core:122372] " nobu (Nobuyoshi Nakada) via ruby-core
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: austin (Austin Ziegler) via ruby-core @ 2025-06-01 23:32 UTC (permalink / raw)
  To: ruby-core; +Cc: austin (Austin Ziegler)

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

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

* Author: austin (Austin Ziegler)
* Status: Open
* 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/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [ruby-core:122372] [Ruby Bug#21392] Data classes do not allow overriding #inspect
  2025-06-01 23:32 [ruby-core:122369] [Ruby Bug#21392] Data classes do not allow overriding #inspect austin (Austin Ziegler) via ruby-core
@ 2025-06-02  0:34 ` nobu (Nobuyoshi Nakada) via ruby-core
  2025-06-02  1:57 ` [ruby-core:122373] " mame (Yusuke Endoh) via ruby-core
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: nobu (Nobuyoshi Nakada) via ruby-core @ 2025-06-02  0:34 UTC (permalink / raw)
  To: ruby-core; +Cc: nobu (Nobuyoshi Nakada)

Issue #21392 has been updated by nobu (Nobuyoshi Nakada).

Status changed from Open to Feedback

I get the expected results for 3.2..master.

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

* Author: austin (Austin Ziegler)
* Status: Feedback
* 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/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [ruby-core:122373] [Ruby Bug#21392] Data classes do not allow overriding #inspect
  2025-06-01 23:32 [ruby-core:122369] [Ruby Bug#21392] Data classes do not allow overriding #inspect austin (Austin Ziegler) via ruby-core
  2025-06-02  0:34 ` [ruby-core:122372] " nobu (Nobuyoshi Nakada) via ruby-core
@ 2025-06-02  1:57 ` mame (Yusuke Endoh) via ruby-core
  2025-06-02  2:14 ` [ruby-core:122374] " austin (Austin Ziegler) via ruby-core
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: mame (Yusuke Endoh) via ruby-core @ 2025-06-02  1:57 UTC (permalink / raw)
  To: ruby-core; +Cc: mame (Yusuke Endoh)

Issue #21392 has been updated by mame (Yusuke Endoh).


I cannot reproduce the issue neither.

```
$ cat t.rb
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]

$ ruby -v t.rb
ruby 3.4.2 (2025-02-15 revision d2930f8e7a) +PRISM [x86_64-linux]
CIELAB [1.0000% 2.0000 3.0000]
```

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

* Author: austin (Austin Ziegler)
* Status: Feedback
* 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/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [ruby-core:122374] [Ruby Bug#21392] Data classes do not allow overriding #inspect
  2025-06-01 23:32 [ruby-core:122369] [Ruby Bug#21392] Data classes do not allow overriding #inspect austin (Austin Ziegler) via ruby-core
  2025-06-02  0:34 ` [ruby-core:122372] " nobu (Nobuyoshi Nakada) via ruby-core
  2025-06-02  1:57 ` [ruby-core:122373] " mame (Yusuke Endoh) via ruby-core
@ 2025-06-02  2:14 ` austin (Austin Ziegler) via ruby-core
  2025-06-02  2:22 ` [ruby-core:122375] " mame (Yusuke Endoh) via ruby-core
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: austin (Austin Ziegler) via ruby-core @ 2025-06-02  2:14 UTC (permalink / raw)
  To: ruby-core; +Cc: austin (Austin Ziegler)

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


You are correct (and I should have known better; I have unit tests proving this).

I'm not sure if this is an IRB issue, because IRB's output always outputs `<data …>`.

```
irb(main):002> p Color::CIELAB[1,2,3]
CIELAB [1.0000% 2.0000 3.0000]
=> #<data Color::CIELAB l=1, a=2, b=3>
```

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

* Author: austin (Austin Ziegler)
* Status: Feedback
* 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/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [ruby-core:122375] [Ruby Bug#21392] Data classes do not allow overriding #inspect
  2025-06-01 23:32 [ruby-core:122369] [Ruby Bug#21392] Data classes do not allow overriding #inspect austin (Austin Ziegler) via ruby-core
                   ` (2 preceding siblings ...)
  2025-06-02  2:14 ` [ruby-core:122374] " austin (Austin Ziegler) via ruby-core
@ 2025-06-02  2:22 ` mame (Yusuke Endoh) via ruby-core
  2025-06-02  6:00 ` [ruby-core:122377] " nobu (Nobuyoshi Nakada) via ruby-core
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: mame (Yusuke Endoh) via ruby-core @ 2025-06-02  2:22 UTC (permalink / raw)
  To: ruby-core; +Cc: mame (Yusuke Endoh)

Issue #21392 has been updated by mame (Yusuke Endoh).

Status changed from Feedback to Assigned
Assignee set to ima1zumi (Mari Imaizumi)

Thank you, confirmed. @ima1zumi @tompng Can you take a look?

```
$ irb
irb(main):001* module Color
irb(main):002*   CIELAB = Data.define(:l, :a, :b) do
irb(main):003*     def inspect
irb(main):004*       "CIELAB [%.4f%% %.4f %.4f]" % [l, a, b]
irb(main):005*     end
irb(main):006*   end
irb(main):007> end
=> Color::CIELAB
irb(main):008> Color::CIELAB[1,2,3]
=> #<data Color::CIELAB l=1, a=2, b=3>
```

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

* 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/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [ruby-core:122377] [Ruby Bug#21392] Data classes do not allow overriding #inspect
  2025-06-01 23:32 [ruby-core:122369] [Ruby Bug#21392] Data classes do not allow overriding #inspect austin (Austin Ziegler) via ruby-core
                   ` (3 preceding siblings ...)
  2025-06-02  2:22 ` [ruby-core:122375] " mame (Yusuke Endoh) via ruby-core
@ 2025-06-02  6:00 ` nobu (Nobuyoshi Nakada) via ruby-core
  2025-06-03  2:14 ` [ruby-core:122384] " austin (Austin Ziegler) via ruby-core
  2025-06-05 12:11 ` [ruby-core:122453] " alanwu (Alan Wu) via ruby-core
  6 siblings, 0 replies; 8+ messages in thread
From: nobu (Nobuyoshi Nakada) via ruby-core @ 2025-06-02  6:00 UTC (permalink / raw)
  To: ruby-core; +Cc: nobu (Nobuyoshi Nakada)

Issue #21392 has been updated by nobu (Nobuyoshi Nakada).


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?

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
```


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

* 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/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [ruby-core:122384] [Ruby Bug#21392] Data classes do not allow overriding #inspect
  2025-06-01 23:32 [ruby-core:122369] [Ruby Bug#21392] Data classes do not allow overriding #inspect austin (Austin Ziegler) via ruby-core
                   ` (4 preceding siblings ...)
  2025-06-02  6:00 ` [ruby-core:122377] " nobu (Nobuyoshi Nakada) via ruby-core
@ 2025-06-03  2:14 ` austin (Austin Ziegler) via ruby-core
  2025-06-05 12:11 ` [ruby-core:122453] " alanwu (Alan Wu) via ruby-core
  6 siblings, 0 replies; 8+ messages in thread
From: austin (Austin Ziegler) via ruby-core @ 2025-06-03  2:14 UTC (permalink / raw)
  To: ruby-core; +Cc: austin (Austin Ziegler)

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/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [ruby-core:122453] [Ruby Bug#21392] Data classes do not allow overriding #inspect
  2025-06-01 23:32 [ruby-core:122369] [Ruby Bug#21392] Data classes do not allow overriding #inspect austin (Austin Ziegler) via ruby-core
                   ` (5 preceding siblings ...)
  2025-06-03  2:14 ` [ruby-core:122384] " austin (Austin Ziegler) via ruby-core
@ 2025-06-05 12:11 ` alanwu (Alan Wu) via ruby-core
  6 siblings, 0 replies; 8+ messages in thread
From: alanwu (Alan Wu) via ruby-core @ 2025-06-05 12:11 UTC (permalink / raw)
  To: ruby-core; +Cc: alanwu (Alan Wu)

Issue #21392 has been updated by alanwu (Alan Wu).

Status changed from Assigned to Closed

Closing as requested.

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

* Author: austin (Austin Ziegler)
* Status: Closed
* 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/

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2025-06-05 12:11 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-06-01 23:32 [ruby-core:122369] [Ruby Bug#21392] Data classes do not allow overriding #inspect austin (Austin Ziegler) via ruby-core
2025-06-02  0:34 ` [ruby-core:122372] " nobu (Nobuyoshi Nakada) via ruby-core
2025-06-02  1:57 ` [ruby-core:122373] " mame (Yusuke Endoh) via ruby-core
2025-06-02  2:14 ` [ruby-core:122374] " austin (Austin Ziegler) via ruby-core
2025-06-02  2:22 ` [ruby-core:122375] " mame (Yusuke Endoh) via ruby-core
2025-06-02  6:00 ` [ruby-core:122377] " nobu (Nobuyoshi Nakada) via ruby-core
2025-06-03  2:14 ` [ruby-core:122384] " austin (Austin Ziegler) via ruby-core
2025-06-05 12:11 ` [ruby-core:122453] " alanwu (Alan Wu) via ruby-core

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).