一、Ruby 的变量
Ruby 中的变量分为全局变量和局部变量,局部变量是以小写祖母或许下划线最初,有字母和下划线组成的。
比方以下变量的命名都是合格的:a,_a, name, last_name 等。
局部变量表明变量的作用域是有限的,一个局部变量仅仅在程序中的有限部分是可见的,如在一个办法的界说中,局部变量的称号能够在不同的作用域中复用,也就是说能够在多个位置运用相同变量名的变量。
只需这些位置有不同的作用域,即便变量名相同也会被认为是两个不同的变量。
# Ruby 的变量
def say_hi
info = "Elixir"
puts info
end
def start_here
info = "Scala"
puts info
say_hi
puts info
end
start_here
当调用 start_here 办法时,info 变量被赋值为 Scala,接着 start_here 办法内调用 say_hi 办法,say_hi 办法内将另一个同名的 info 变量赋值为 Elixir,所以终究输出成果为:
Scala
Elixir
Scala
变量、目标和引证
变量的赋值,简单看起来是左面的变量被设置了与右边的目标持平,如 info="Elixir"
,当调用 put 办法输出 info 变量时,打印出的内容为 Elixir
,当然右边的目标也能够是一个变量。
def say_goodbye
str = "Hello"
abc = str
str.replace("Goodbye")
puts str
puts abc
end
say_goodbye
履行上述代码,输出成果如下:
Goodbye
Goodbye
上述代码中只对 str 变量进行了替换,为什么 abc 变量的内容也发生了改变?
在 Ruby 中,变量保存的并不是目标的值,而是包含了目标的引证。
在一个以左面变量称号和右边目标构成的赋值表达式中,变量接收的是一个指向目标的引证。在一个从变量到另一个变量赋值中,左面变量会接收到存在有变量的一个引证,终究使得两个变量包含了同一个目标的引证。
Ruby 中的每一个目标,一定有一个或许多个引证,如果没有引证,则能够认为目标对错存活的,它地点的内存空间将会被释放掉。
变量的从头赋值
当给变量赋值时,当把变量放置在左面用等号与右边的目标关联的时分,就开始了这样的一个进程:变量被整理,从头赋值。
info = "Ruby"
message = info
info = "Elixir"
puts info
puts message
履行上述代码,输出成果如下:
Elixir
Ruby
上述代码中第2次给 info 变量赋值时,info 变量被指向了另一个字符串目标,而 message 还是指向 “Ruby” 字符串目标。
Ruby 目标通常描述为目标的标签或许称号。
Ruby 中的关键字
关键字是一组不能用于变量命名的保存词。比方 def 就是一个关键字,它的作用是界说一个办法;if 也是一个关键字,用来书写条件判别语句。
与局部变量一样,办法调用也能够运用纯单词的方式,比方运用 puts 和 print 进行输出的时分,并没有运用 ()
。
在其他状况下可能会发生歧义,Ruby 需要对他们进行判别。
当呈现一个普通的标识符时,Ruby 会进行如下处理:
- 假如标识符是一个关键字,Ruby 会把它作为关键字履行。
- 参加标识符右边有一个等号,这是变量的赋值进程。
- 其他状况,标识符被假定为一次办法调用。
继续创造,加快成长!这是我参与「日新方案 10 月更文挑战」的第9天,点击检查活动概况