ruby中的范围是否被视为功能如javascript或块范围?

时间:2013-07-11 01:15:54

标签: javascript ruby scope

Ruby中的范围是否与Javascript中的范围相似或相同,即功能范围(仅在创建函数时创建新范围)或块范围?如果它们不同,有哪些主要区别?

2 个答案:

答案 0 :(得分:2)

完整的(我认为)列表是:

  • 脚本,
  • 模块定义,
  • 类定义和
  • 方法定义

创建新的范围,

  • 阻止和
  • stabby lambda literals

创建嵌套范围(并且是创建嵌套范围的东西)。

“Block”这里的意思是“允许您将单个匿名过程作为任何方法的最后一个参数传递的特殊语法结构”;它意味着“if表达式的部分”(或类似)。

答案 1 :(得分:0)

阻止范围。块中新定义的变量在块后不再存在;在块之前定义的变量保持其更广泛的范围。

a = 1
1.times do
  a = 2 # outer scope
  b = 1 # block scope
end
puts a # 2
puts b # error

这里我使用Ruby意义上的“块”。如果你从C意义上看,块没有范围(即ifwhilebegin等等。不要引入新的范围级别。)