一、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 也是一个关键字,用来书写条件判别语句。

与局部变量一样,办法调用也能够运用纯单词的方式,比方运用 putsprint 进行输出的时分,并没有运用 ()

在其他状况下可能会发生歧义,Ruby 需要对他们进行判别。

当呈现一个普通的标识符时,Ruby 会进行如下处理:

  • 假如标识符是一个关键字,Ruby 会把它作为关键字履行。
  • 参加标识符右边有一个等号,这是变量的赋值进程。
  • 其他状况,标识符被假定为一次办法调用。

继续创造,加快成长!这是我参与「日新方案 10 月更文挑战」的第9天,点击检查活动概况