ruby语言有一个很好的优点就是指定了一套规则,我们无须定义这个变量是什么种类,只需遵循某种命名方式就可以知道这个变量是什么种类的。
- 局部变量
- 全局变量
- 实例变量
- 类变量
- 常量
- 类名模块名
- 方法名
局部变量
变量在程序中的有效范围是局部的。也就是本地变量。以英文字母或者_
开头。像下面这样的变量名在ruby程序中都被视为局部变量。
temp = "this is a local variable"
全局变量
顾名思义,就是在整个程序中都可以访问的,全局变量的值在程序中任何地方都可以修改。以$
开头。但我们一般不推荐使用全局变量。
$temp = "this is a global variable"
实例变量
以@
开头,每new一个实例,每个实例就会对应有自己的实例变量。只要实例存在,实例变量的值就不会消失。
class HelloWorld
def initialize(myname = "ruby")
@name = myname
end
def hello
puts "Hello,world. I am #{@name}"
end
end
bob = HelloWorld.new("BOb")
alice = HelloWorld.new("Alice")
ruby = HelloWorld.new
bob.hello
alice.hello
ruby.hello
类变量
以@@
开头,所有实例可以共享的变量。在这里顺便说说实例变量和类变量的区别。在上面的例子中,bob``alice``ruby
它们都有各自的@name
变量,不会相互影响。但类变量不会,它们可以共享。
class C
@@name = "java"
def initialize(myname = 'python')
@name = myname
end
def hello
puts "实例变量#{@name}"
puts "类变量#{@@name}"
end
def set_class_name(name)
@@name = name
end
def set_name(name)
@name = name
end
end
c1 = C.new
c2 = C.new
print "初始状态","\n\n"
print "实例1 "
c1.hello
print "实例2 "
c2.hello
print "实例1修改实例变量和类变量","\n\n"
c1.set_name('ruby')
c1.set_class_name('c++')
print "实例1 "
c1.hello
print "实例2 "
c2.hello
print "实例2修改实例便量和类变量","\n\n"
c2.set_name('javascript')
c2.set_class_name('c#')
print "实例1 "
c1.hello
print "实例2 "
c2.hello
运行结果:
在这个例子中,修改实例变量不会影响其他实例当中的值,但修改类变量会相互影响。这个有点像javascript
当中的原型属性和实例属性。
常量
以大写字母开头,内置的一些常量是完全大写的,像ARGV
等。
类名和模块名
当出现多个单词组合的类名模块名时,一般以首字母大写,注意,这里不是规定,而是习惯。上面的变量和常量是规定。
class HelloWorld
....
end
方法名
当出现多个单词组合的方法名时,小写用_
隔开。这个同样也是习惯。不过养成一个良好的编程习惯是很重要的。
def sort_list_by_name
...
end