Ruby variables
A variable is a storage location that holds any data that can be used by any program.
Ruby supports five types of variables.
Generally, lowercase letters, starting with an underscore: variable (Variable).
#$
Starts with: Global variable.#@
Starts with: Instance variable.@@
Begins with: Class variable (Class variable) Class variables are shared in the entire inheritance chainCapitalized Letters starting with: Constant.
You have already roughly understood these variables in the previous chapters. This chapter will explain these five types of variables to you in detail.
Ruby global variables
Global variables start with $. The value of an uninitialized global variable is nil, and a warning will be generated after using the -w option.
Assigning values to global variables will change the global state, so it is not recommended to use global variables.
The following example shows the usage of global variables.
#!/usr/bin/ruby # -*- coding: UTF-8 -*- $global_variable = 10 class Class1 def print_global puts "全局变量在 Class1 中输出为 #$global_variable" end end class Class2 def print_global puts "全局变量在 Class2 中输出为 #$global_variable" end end class1obj = Class1.new class1obj.print_global class2obj = Class2.new class2obj.print_global
Here, $global_variable is the global variable. This will produce the following result:
Note: In Ruby, you can access the value of any variable or constant by placing the # character in front of the variable or constant.
全局变量在 Class1 中输出为 10 全局变量在 Class2 中输出为 10
Ruby instance variables
Instance variables start with @. An uninitialized instance variable has a value of nil, and a warning is generated after using the -w option.
The following example shows the usage of instance variables.
#!/usr/bin/ruby class Customer def initialize(id, name, addr) @cust_id=id @cust_name=name @cust_addr=addr end def display_details() puts "Customer id #@cust_id" puts "Customer name #@cust_name" puts "Customer address #@cust_addr" end end # 创建对象 cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2=Customer.new("2", "Poul", "New Empire road, Khandala") # 调用方法 cust1.display_details() cust2.display_details()
Here, @cust_id, @cust_name and @cust_addr are instance variables. This produces the following results:
Customer id 1 Customer name John Customer address Wisdom Apartments, Ludhiya Customer id 2 Customer name Poul Customer address New Empire road, Khandala
Ruby Class Variables
Class variables begin with @@ and must be initialized before they can be used in a method definition.
Referencing an uninitialized class variable will generate an error. Class variables can be shared among subclasses or submodules of the class or module in which they are defined.
After using the -w option, overloading class variables will generate a warning.
The following example shows the usage of class variables.
#!/usr/bin/ruby class Customer @@no_of_customers=0 def initialize(id, name, addr) @cust_id=id @cust_name=name @cust_addr=addr end def display_details() puts "Customer id #@cust_id" puts "Customer name #@cust_name" puts "Customer address #@cust_addr" end def total_no_of_customers() @@no_of_customers += 1 puts "Total number of customers: #@@no_of_customers" end end # 创建对象 cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2=Customer.new("2", "Poul", "New Empire road, Khandala") # 调用方法 cust1.total_no_of_customers() cust2.total_no_of_customers()
Here, @@no_of_customers is a class variable. This produces the following result:
Total number of customers: 1 Total number of customers: 2
Ruby Local Variables
Local variables start with a lowercase letter or an underscore _. Local variables are scoped from class, module, def or do to the corresponding end or from the opening brace to the closing brace {}.
When an uninitialized local variable is called, it is interpreted as calling a method without parameters.
Assignment to uninitialized local variables can also be regarded as variable declaration. The variable will exist until the end of the current scope. The lifetime of local variables is determined when Ruby parses the program.
In the above example, the local variables are id, name and addr.
Ruby Constants
Constants start with an uppercase letter. Constants defined within a class or module can be accessed from within the class or module, and constants defined outside the class or module can be accessed globally.
Constant cannot be defined within a method. Referring to an uninitialized constant will generate an error. Assigning a value to an initialized constant will generate a warning.
#!/usr/bin/ruby # -*- coding: UTF-8 -*- class Example VAR1 = 100 VAR2 = 200 def show puts "第一个常量的值为 #{VAR1}" puts "第二个常量的值为 #{VAR2}" end end # 创建对象 object=Example.new() object.show
Here, VAR1 and VAR2 are constants. This will produce the following results:
第一个常量的值为 100 第二个常量的值为 200
Ruby Pseudo-Variables
They are special variables that have the appearance of local variables but behave like constants. You cannot assign any value to these variables.
#self: The receiver object of the current method.
#true: represents the value of true.
false: represents the value of false.
nil: represents the value of undefined.
__FILE__: The name of the current source file.
#__LINE__: The number of the current line in the source file.