Actions
Bug #13145
closedSymbol#clone doesn't work correctly
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16]
Description
Ruby 2.4.0 has a bug that Symbol
converted from String
at first cannot be cloned:
user@mypc ~$ irb
irb(main):001:0> :abc.clone # When :abc has not been created from String (e.g. 'abc'.to_s.to_sym), clone will work.
=> :abc
irb(main):002:0> 'abc'.to_s.to_sym
=> :abc
irb(main):003:0> :abc.clone # This clone will also work.
=> :abc
irb(main):004:0> 'abcd'.to_s.to_sym
=> :abcd
irb(main):005:0> :abcd.clone # This clone WON'T WORK!?
TypeError: allocator undefined for Symbol
from (irb):5:in `clone'
from (irb):5
from /usr/local/bin/irb:11:in `<main>'
irb(main):006:0>
As written in Ruby 2.4.0 documentation (e.g. https://docs.ruby-lang.org/ja/latest/method/Object/i/clone.html),
Symbol#clone must return itself.
Currently, I define Symbol#clone as the following in order to fix this bug:
class Symbol
def clone
self
end
end
I think something has gone wrong ...
Updated by nobu (Nobuyoshi Nakada) over 7 years ago
- Description updated (diff)
- Backport changed from 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN to 2.2: DONTNEED, 2.3: DONTNEED, 2.4: REQUIRED
Updated by nobu (Nobuyoshi Nakada) over 7 years ago
- Status changed from Open to Closed
Applied in changeset r57407.
object.c: no TypeError at Symbol
- object.c (special_object_p): uninterned Symbol also should not
raise a TypeError but return itself instead, as well as interned
Symbols. [ruby-core:79216] [Bug #13145]
Updated by naruse (Yui NARUSE) about 7 years ago
- Backport changed from 2.2: DONTNEED, 2.3: DONTNEED, 2.4: REQUIRED to 2.2: DONTNEED, 2.3: DONTNEED, 2.4: DONE
ruby_2_4 r57869 merged revision(s) 57407.
Actions
Like0
Like0Like0Like0