首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将变量声明为local

将变量声明为local
EN

Stack Overflow用户
提问于 2013-12-18 11:23:27
回答 2查看 101关注 0票数 0

在Ruby中,当你创建一个新的作用域时,如果一个变量已经存在于外部作用域中,那么它将在第一次赋值时被捕获,或者它将被本地创建。如何防止变量被捕获?

EN

回答 2

Stack Overflow用户

发布于 2013-12-18 19:13:15

Ruby中有不同种类的局部作用域:脚本体、类体、模块体、方法体、lambda字面量和块体。脚本、类、模块和方法作用域无论如何都不嵌套,因此您不需要做任何事情。

只有块和lambda字面量可以嵌套,您可以通过将变量附加到以分号分隔的参数列表来显式地将变量声明为本地变量:

代码语言:javascript
运行
复制
x, y, z = %i[x y z]

-> (m1, m2, o1=:o1, o2=:o2, *splat, m3, m4, 
      ok1: :ok1, mk1:, mk2:, ok2: :ok2, **ksplat, &blk; x, y) {
     Hash[local_variables.map {|var| [var, eval(var.to_s)] }]
}.(1, 2, 3, 4, mk1: 5, mk2: 6)
# => { x: nil, y: nil, z: :z, m1: 1, m2: 2, o1: :o1, o2: :o2, splat: [], 
#      m3: 3, m4: 4, ok1: :ok1, mk1: 5, mk2: 6, ok2: :ok2, ksplat: {}, 
#      blk: nil }
票数 1
EN

Stack Overflow用户

发布于 2013-12-18 16:19:18

你可以把它放在一个方法中,它们没有词法作用域:

代码语言:javascript
运行
复制
x = 2

def foobar
  x = 123
end

foobar  #=> 123
x       #=> 2

然而,目前还不清楚你的目标是什么。如果你更清楚地描述你的实际问题,我们可能会想出更好的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20649123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档