Ruby中的变量有几种形式,有局部变量、实例变量、类变量和全局变量等等,对于初学者来说,他们经常会感觉到困惑,特别是对于像小编这样的,都会让我们很难理解,今天武林技术频道小编和你分享总结Ruby中的变量,一起来看看吧!
一、命名方式
1.局部变量:小写字母或者“_”开头,如user,解释器解释到时才开始在内存中存在,一个良好的习惯是在进行变量定义时用nil进行赋值初始化,否则会出现类似undefined local variable or method `z'的错误;
2.实例变量:@开头,如@user,默认初始化为nil,此处的“实例”指的是类对象本身,或者类的对象;
3.类变量:@@开头,如@@user,需要进行初始化后才能调用,否则会出现类似uninitialized class variable @@user in Account的错误;
4.全局变量:$开头,如$user,默认初始化为nil;
二、作用范围
局部变量:如user,只作用于本类、本方法或本模块内,不同于java语言习惯,在类中定义的变量,可以在类的方法中进行调用,Ruby中的局部变量,类中定义的,只能在类中访问,其子类、方法、内部类中都无法调用,如下边示例代码:
实例变量:如@user,有点类似于java中POJO类的成员变量,类中随意访问,类外通过方法访问,作用于本实例对象范围内或本类的实例对象范围内(这句话有点绕口,请注意分清楚类对象本身[Account,是Class类的一个对象]和 类实例化后的对象[Account.new,是Account类的一个对象]),这是两个相互独立的域,定义在Account中的变量不能在Account.new中访问,反之亦然,如下边示例代码:
A.look #输出:'This is @alpha' value!''
A.new.look #输出:''
再看如下代码:
def A.look
puts "#@alpha"
end
def look
@alpha='This is @alpha/' value from look!'
puts "#@alpha"
end
def look_again
puts "#@alpha"
end
end
A.look #输出:'This is @alpha' value!''
a=A.new
a.look #输出:'This is @alpha' value from look!'
a.look_again #输出:'This is @alpha' value from look!'
可见,@alpha='This is @alpha/' value!'是定义在类对象本身的实例变量,@alpha='This is @alpha/' value from look!'是定义在类实例化后的对象中的实例变量,另外,使用实例变量时还应该注意一下几点:
1、实例变量不管是在类中定义,还是在方法中定义,其都属于类,而不是方法
2、实例变量只存在于实例范围,不可在子类中引用或者赋值
3、实例变量永远都是Private的,不能暴露为Public,外部访问通过方法进行,可以使用attr_accessor简便定义
类变量:如@@user,作用于类的所有范围,所有实例对象共享,包括子类及其实例对象,类变量通过Protected声明的,如下边示例代码:
def A.look
puts "#@@alpha"
end
def look
puts "#@@alpha"
end
def look_again
puts "#@@alpha"
end
end
class B<A
end
A.look #输出:'This is @alpha' value!'
B.look #输出:'This is @alpha' value!'
a=A.new
a.look #输出:'This is @alpha' value!'
a.look_again #输出:'This is @alpha' value!'
b=B.new
b.look #输出:'This is @alpha' value!'
b.look_again #输出:'This is @alpha' value!'
以上就是关于总结Ruby中的变量介绍,要想知道更多的技术知识,大家需要去做更多的了解,武林技术频道是你的满意选择,大家可以放心阅览。
新闻热点
疑难解答
图片精选