Understanding Variable Naming in Ruby


#1

I’m trying to better understand how variables are named in Ruby…
here’s what I think I understand. Please correct me where I
misunderstand:

#Globals are defined outside a class/method and are
#available everywhere. Must starts with ‘$’
$global_variable

#Class names must start with capitalized letter.
class Class_name

 #Starts with '@@' and is available to all methods in the class.
 @@class_variable

 #Method name must start with lowercase letter or '_'
 def method_name

     #Must start with '@' similar to Python's self notation.
     #This variable is local to the method.
     @method_variable

 end

end

Where do constants and local variables fit into this?

Thanks,
Brad


#2

Brad wrote:

Where do constants and local variables fit into this?

Constants typically are in all upper case characters. Then local
variables don’t start with a leading @@, @, or $. Something like
thisLocalVar or this_local_var depending on your background :slight_smile:


#3

Here is a nonsensical class that uses class, instance, and local
variables. I don’t think creating my own class variable accessors is
Rubyish, but I just threw it in there for kicks.

class Foo
attr_accessor :instVar, :localVar
@@classVar=“class variable”
localVar=“local variable”

def initialize
	super
	@instVar="instance variable"
end

def self.classVar
	return @@classVar
end

def self.classVar=other
	@@classVar=other
	return @@classVar
end

def localVarCheck
	begin
		print "#{self}'s local variable is #{localVar}.\n"
	rescue NameError => e
		print "#{self}'s local variable doesn't exist! The specific error

is:\n#{e}.\n"
end
end

end

print “Foo’s classVar is set to #{Foo.classVar}.\n”
print “Foo’s classVar is now changed to #{Foo.classVar=“new class
variable”}.\n”
foo=Foo.new
print “foo’s instVar is set to #{foo.instVar}.\n”
print “foo’s instVar is now changed to #{foo.instVar=“new instance
variable”}.\n”
foo.localVarCheck