Thursday, October 23, 2008

(9)BEGIN和END

BEGIN和END是Ruby中的关键字,用于定义一段代码。这两个关键字后需要跟一对{}代码就放在其中。记住这里的BEGIN和END 与小写的begin和end是不同的。BEGIN中的代码总是会被执行一次,不管这段代码在什么位置,即使想下面的例子中这段代码在一个不可能执行的条件分支中,它还是会被执行一次。而END中的代码是在所有的代码都执行之后才会被执行。而且,如果这两个关键字中的代码存在于循环或者迭代器中时,他们只会被执行一次。
if (false) 
  BEGIN {
    puts "if";                   # 这里会被打印
    a = 4;                       # 这里的变量只存在于BEGIN块中
  }
else
  BEGIN { puts "else" }          # 这里也会被打印
end

10.times {BEGIN { puts "loop" }} # BEGIN位于迭代器中时,只被打印一次

如你所见,在BEGIN中的变量只在它所在的BEGIN块中又要,而END不同,由于它在所有代码执行之后执行,所以,外部变量也可以在END中访问。
a = 4;
if (true) 
  END {                        # 这里会执行
    puts "if";                 # 打印
    puts a                     # 这里的a是一个外部变量,打印 "4"
  }
else
  END { puts "else" }          # 这里不会执行,因为前面的条件判断不成立
end
10.times {END { puts "loop" }} # 在迭代器中只执行一次

No comments: