Make `Hash#except` always return a Hash

[Feature #15822]
This commit is contained in:
Marc-Andre Lafortune 2020-12-17 14:43:11 -05:00 коммит произвёл Marc-André Lafortune
Родитель 5611066e03
Коммит 0d3dc2ec80
2 изменённых файлов: 6 добавлений и 4 удалений

3
hash.c
Просмотреть файл

@ -2643,7 +2643,8 @@ rb_hash_except(int argc, VALUE *argv, VALUE hash)
int i;
VALUE key, result;
result = rb_obj_dup(hash);
result = hash_alloc(rb_cHash);
hash_copy(result, hash);
for (i = 0; i < argc; i++) {
key = argv[i];

Просмотреть файл

@ -20,14 +20,15 @@ ruby_version_is "3.0" do
@hash.except(:a, :chunky_bacon).should == { b: 2, c: 3 }
end
it "returns an instance of a subclass" do
it "always returns a Hash without a default" do
klass = Class.new(Hash)
h = klass.new
h = klass.new(:default)
h[:bar] = 12
h[:foo] = 42
r = h.except(:foo)
r.should == {bar: 12}
r.class.should == klass
r.class.should == Hash
r.default.should == nil
end
end
end