Project

General

Profile

Actions

Backport #8928

closed

instance_variable_defined?, instance_variable_get, instance_variable_set へ インスタンス変数名として `@`, :`@` を渡した時の挙動が、2.0以降で異なる。

Added by kachick (Kenichi Kamiya) over 10 years ago. Updated about 10 years ago.


Description

期待した結果

次のいずれかになることを期待しました。

  • @をインスタンス変数名として利用することが禁じられているのであれば、
    Stringで渡してもSymbolで渡しても例外が発生する。
  • そうでなければ、1.8.7~1.9.3と同じ値を返す。

実際の結果

ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]
ruby 1.9.3p429 (2013-05-15 revision 40747) [x86_64-linux]

ruby -e "p Object.new.instance_variable_defined?(:'@')" # => false
ruby -e "p Object.new.instance_variable_defined?('@')" # => false
ruby -e "p Object.new.instance_variable_get(:'@')" # => nil
ruby -e "p Object.new.instance_variable_get('@')" # => nil
ruby -e "p Object.new.instance_variable_set(:'@', nil)" # => nil
ruby -e "p Object.new.instance_variable_set('@', nil)" # => nil


ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]

ruby -e "p Object.new.instance_variable_defined?(:'@')" # => false
ruby -e "p Object.new.instance_variable_defined?('@')" # => instance_variable_defined?': @' is not allowed as an instance variable name (NameError)
ruby -e "p Object.new.instance_variable_get(:'@')" # => nil
ruby -e "p Object.new.instance_variable_get('@')" # => instance_variable_get': @' is not allowed as an instance variable name (NameError)
ruby -e "p Object.new.instance_variable_set(:'@', nil)" # => nil
ruby -e "p Object.new.instance_variable_set('@', nil)" # => nil


ruby 2.1.0dev (2013-09-19 trunk 42975) [x86_64-linux]

ruby -e "p Object.new.instance_variable_defined?(:'@')" # => false
ruby -e "p Object.new.instance_variable_defined?('@')" # => instance_variable_defined?': @' is not allowed as an instance variable name (NameError)
ruby -e "p Object.new.instance_variable_get(:'@')" # => nil
ruby -e "p Object.new.instance_variable_get('@')" # => instance_variable_get': @' is not allowed as an instance variable name (NameError)
ruby -e "p Object.new.instance_variable_set(:'@', nil)" # => nil
ruby -e "p Object.new.instance_variable_set('@', nil)" # => instance_variable_set': @' is not allowed as an instance variable name (NameError)

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0