Ruby局部域变量一般都是在某一个线程作用域之内才能凑效。比如:$_ ;$& ;$~ ;$`;$' ;$+ ;$1 ;$2 ;$3等等。

Ruby作为一个灵活性较强的语言,内置了许多内部变量,不同的变量可以实现不同的功能,熟练的掌握这些变量的运用,可以方便我们编程。#t#

简要分析Ruby局部域变量(ruby变量作用域)  Ruby局部域变量 第1张

Ruby局部域变量就是其中之一。

在某一个线程作用域内才能有效,下列也可看做是线程内的局部变量.
PS:这边讲解的几个变量都是于正则匹配相关的,正则匹配过程的代码是一样的,这里不重复输入正则表达式匹配的代码,只在***个例子里给出完整的输入和输出,之后的例子只直接输出变量的值

Ruby局部域变量之$_

gets或readline***读入的字符串.若遇到EOF则为nil.该变量的作用域是局部域.

  1. irb(main):006:0>$_
  2. =>nil
  3. irb(main):007:0>gets
  4. foobar
  5. =>"foobar\n"
  6. irb(main):008:0>$_
  7. =>"foobar\n"

Ruby局部域变量之$&

在当前作用域中,正则表达式***一次匹配成功的字符串.若***一次匹配失败,则为nil.

  1. irb(main):002:0>$&
  2. =>nil
  3. irb(main):010:0>/(foo)(bar)(BAZ)?/
    =~"foobarbaz"
  4. =>0
  5. irb(main):011:0>$&
  6. =>"foobar"

Ruby局部域变量之$~

在当前作用域中,***一次匹配成功的相关信息(MatchData对象-为处理与正则表达式的匹配过程相关的信息而设置的类.).
可以使用$~[n]的形式从该数据中抽取第n个匹配结果($n).相当于是$1,$2...
等同于Regexp.last_match.

  1. irb(main):012:0>$~
  2. =>#<MatchData"foobar"1:
    "foo"2:"bar"3:nil
    >
  3. irb(main):026:0>$1
  4. =>"foo"
  5. irb(main):027:0>$~[1]
  6. =>"foo"

Ruby局部域变量之$`

在当前作用域中,正则表达式***一次匹配成功的字符串前面的字符串.若***的匹配失败则为nil.
等同于Regexp.last_match.pre_match.

  1. irb(main):016:0>$`
  2. =>""#由于***匹配成功的内容是
    foobar,输入的字符串前面没有别
    的字符所以是""

Ruby局部域变量之$'

在当前作用域中,正则表达式***一次匹配成功的字符串后面的字符串.若***的匹配失败则为nil.
等同于Regexp.last_match.post_match.

  1. irb(main):028:0>$'
  2. =>"baz"

Ruby局部域变量之$+

在当前作用域中,正则表达式***一次匹配成功的字符串部分中,与***一个括号相对应的那部分字符串.若***的匹配失败则为nil.在多项选择型匹配模型中,若您无法断定是哪个部分匹配成功时,该变量将会非常有用.

  1. irb(main):029:0>$+
  2. =>"bar"

Ruby局部域变量之$1
$2
$3 ...

分别存储着***一次模型匹配成功时与第n个括号相匹配的值.若没有相应的括号时,其值为nil.等同于Regexp.last_match[1], Regexp.last_match[2],...

  1. irb(main):030:0>$1
  2. =>"foo"
  3. irb(main):031:0>$2
  4. =>"bar"
  5. irb(main):032:0>$3
  6. =>nil

转载请说明出处
知优网 » 简要分析Ruby局部域变量(ruby变量作用域)

发表评论

您需要后才能发表评论