1. 变量作用域
- 局部变量:作用域仅限于定义它的方法、块或局部作用域内。例如:
def local_variable_example
local_var = "这是一个局部变量"
puts local_var
end
local_variable_example
# 这里如果试图访问 local_var 会报错,因为超出了作用域
- 实例变量:以
@
开头,作用域是对象实例,同一个类的不同实例之间实例变量相互独立。例如:
class InstanceVariableExample
def initialize
@instance_var = "这是一个实例变量"
end
def print_instance_variable
puts @instance_var
end
end
obj1 = InstanceVariableExample.new
obj1.print_instance_variable
obj2 = InstanceVariableExample.new
obj2.instance_variable_set(:@instance_var, "obj2的实例变量")
obj2.print_instance_variable
obj1.print_instance_variable
- 类变量:以
@@
开头,作用域是整个类及其子类。类变量在整个类层次结构中是共享的。例如:
class ClassVariableExample
@@class_var = "这是一个类变量"
def self.print_class_variable
puts @@class_var
end
def change_class_variable
@@class_var = "类变量被修改了"
end
end
ClassVariableExample.print_class_variable
obj = ClassVariableExample.new
obj.change_class_variable
ClassVariableExample.print_class_variable
class SubClass < ClassVariableExample
def self.print_subclass_class_variable
puts @@class_var
end
end
SubClass.print_subclass_class_variable
$global_var = "这是一个全局变量"
def print_global_variable
puts $global_var
end
print_global_variable
2. 字符串转整型
to_i
方法:将字符串转换为整数,如果字符串开头不是数字则返回0。特点是简单直接,忽略非数字部分。例如:
str1 = "123"
str2 = "abc123"
puts str1.to_i
puts str2.to_i
Integer()
方法:尝试将字符串转换为整数,如果字符串不是有效的整数表示形式则抛出 ArgumentError
异常。例如:
str1 = "123"
str2 = "abc123"
puts Integer(str1)
# 下面这行代码会抛出异常
# puts Integer(str2)
Kernel#atoi
方法:和 to_i
类似,将字符串转换为整数,从字符串开头解析,遇到非数字字符停止。例如:
str1 = "123"
str2 = "abc123"
puts atoi(str1)
puts atoi(str2)