Bug #19786
closedData::define() does not work as documented
Description
Not sure if this is a bug or a feature.
RDoc documentation for Data::define:
define(name, *symbols) → class
define(*symbols) → classDefines a new Data class.
If the first argument is a string, the class is stored in Data:: constant.
M1 = Data.define('Measure', :amount, :unit)
p M1 #=> M1
p M1.members #=> [:Measure, :amount, :unit]
S1 = Struct.new('Measure', :amount, :unit)
p S1 #=> Struct::Measure
p S1.members #=> [:amount, :unit]
Unlike Struct.new
, Data.define
does not accept a name as first argument: it converts it to a symbol, and therefore a member.
There is no trace of Data::Measure
in the example above, while we do have Struct::Measure
.
Updated by zverok (Victor Shepelev) over 1 year ago
It's a documentation bug :( The first implementations of Data
had this feature, but then Matz said it is not necessary (it is considered a legacy in Struct anyway), and I removed the feature but probably forgot to adjust the comments.
Already fixed in master: https://docs.ruby-lang.org/en/master/Data.html#method-c-define
Updated by thyresias (Thierry Lambert) over 1 year ago
zverok (Victor Shepelev) wrote in #note-1:
It's a documentation bug :( The first implementations of
Data
had this feature, but then Matz said it is not necessary (it is considered a legacy in Struct anyway), and I removed the feature but probably forgot to adjust the comments.Already fixed in master: https://docs.ruby-lang.org/en/master/Data.html#method-c-define
Thank you Victor for the update.
The behavior of Struct.new with a name is indeed a bit weird, so I was expecting this to be a feature rather than a bug, but I filed it since it was written in the bible documentation. ^_^
Updated by nobu (Nobuyoshi Nakada) over 1 year ago
- Status changed from Open to Closed
- Backport changed from 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN to 3.0: DONTNEED, 3.1: DONTNEED, 3.2: REQUIRED
It was fixed at cada537040743cbe49aac6740816d648ca0d3fb6.
To be backported.
Updated by nagachika (Tomoyuki Chikanaga) over 1 year ago
- Backport changed from 3.0: DONTNEED, 3.1: DONTNEED, 3.2: REQUIRED to 3.0: DONTNEED, 3.1: DONTNEED, 3.2: DONE
ruby_3_2 19a3466a1460924058ca16a259601bb753293d43 merged revision(s) cada537040743cbe49aac6740816d648ca0d3fb.