Project

General

Profile

Actions

Feature #9565

closed

Unifying the methods (const|class_variable|instance_variable)_(defined?|get|set)

Added by sawa (Tsuyoshi Sawada) about 10 years ago. Updated about 10 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
[ruby-core:61082]

Description

An argument to methods of the form (const|class_variable|instance_variable)_(defined?|get|set) already describes if it is meant to be a constant, class variable, or instance variable. For example, if "Foo" were to be used as an argument, a meaningful usage may be using it with const_get, but not class_variable_get or instance_variable_get. Whenever I use these methods, I feel redundancy and extra burden of having to repeat the information twice (once by method name and once by capitalization/sigil).

I propose that if we use a common word (let's say token, but I am not sure of this naming) in place of the words const, class_variable, and instance_variable, and have methods to unify them and get rid of the redundancy, then it would be easier for programmers. Particularly, Object should have the following instance methods that are aliases of the conventional methods:

token_defined? ==> instance_variable_defined?
token_get      ==> instance_variable_get
token_set      ==> instance_variable_set

and Module should have the following instance methods that call different methods or error depending on the first argument:

token_defined? ==> const_defined?              (for capitalized arguments like "Foo")
               ==> class_variable_defined?     (for arguments prepended with @@)
               ==> instance_variable_defined?  (for arguments prepended with @)
               ==> Error                       (otherwise)

token_get      ==> const_get                   (for capitalized arguments like "Foo")
               ==> class_variable_get          (for arguments prepended with @@)
               ==> instance_variable_get       (for arguments prepended with @)
               ==> Error                       (otherwise)

token_set      ==> const_set                   (for capitalized arguments like "Foo")
               ==> class_variable_set          (for arguments prepended with @@)
               ==> instance_variable_set       (for arguments prepended with @)
               ==> Error                       (otherwise)

So when we use this, we do not have to think about the complicated method name; we just need to provide the right argument:

module A
  token_defined?("Foo") # => false
  token_set("Foo", 1)
  token_get("Foo")      # => 1

  token_defined?("@@foo") # => false
  token_set("@@foo", 2)
  token_get("@@foo")      # => 2

  token_defined?("@foo") # => false
  token_set("@foo", 3)
  token_get("@foo")      # => 3
end
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0