Tag: 局部变量

方法ruby中散列的未定义局部变量

出于某种原因,我得到了 NameError: undefined local variable or method `states’ for main:Object 虽然国家是明确定义的。 这里发生了什么? 在irb中我添加了状态并使用状态[:CA]访问它,但是当我把它放在一个方法中时我得到了那个错误。 states = { CA: ‘California’, FL: ‘Florida’, MI: ‘Michigan’, NY: ‘New York’, OR: ‘Oregon’, } states[:CO] = ‘Colorado’ states[:HI] = ‘Hawaii’ cities = { CA: [‘Alameda’, ‘Apple Valley’, ‘Exeter’], FL: [‘Exeter’, ‘Amelia Island’, ‘Bunnell’], MI: [‘Ann Arbor’, ‘East China’, ‘Elberta’], NY: [‘Angelica’, […]

解释为局部变量会覆盖方法名称吗?

正如在这个问题中 ,当未定义的局部变量在其自己的赋值中使用时,它将被计算为nil 。 x = x # => nil 但是当局部变量的名称与现有方法名称冲突时,它更棘手。 为什么下面的最后一个例子返回nil ? {}.instance_eval{a = keys} # => [] {}.instance_eval{keys = self.keys} # => [] {}.instance_eval{keys = keys} # => nil

在Ruby中,没有办法在当前上下文中动态定义局部变量吗?

我想知道是否有一种方法可以让我在当前上下文中动态定义一个先前未定义的变量。 例如: foo # => NameError: undefined method or local variable … # Some method call which sets foo = 1 in the local context foo # => 1 换句话说,假设foo未定义,我正在寻找任何代码,可以让我在不使用foo变量的情况下定义局部变量foo (例如,如果我有一些其他变量bar其值为:foo ,我不得不依赖在那上面设置foo的值)。 似乎eval(‘foo = 1’)或eval(‘foo = 1’, binding)或者在Ruby 2.1中, binding.local_variable_set(:foo, 1)都等效于: 1.times do foo = 1 end 换句话说,它们在新的本地上下文的上下文中设置foo ,使得该值在该上下文之外是不可访问的。 我正在寻找可能吗? 更新:此问题并非特定于任何特定的局部变量上下文(模块/类,方法,过程,块等)。 我有兴趣明确知道它可以或不可以完成的任何背景。

在Ruby中动态设置局部变量

我有兴趣在Ruby中动态设置局部变量。 不创建方法,常量或实例变量。 所以类似于: args[:a] = 1 args.each_pair do |k,v| Object.make_instance_var k,v end puts a > 1 我特别想要局部变量,因为所讨论的方法存在于模型中,我不想污染全局或对象空间。