使用字符串按名称访问本地变量
我是新手,但我有以下代码:
when /^read (.+)$/ puts "Reading #{$1}:" puts $1.description.downcase
我想使用$ 1作为变量,我可以调用方法,目前解释器"NoMethodError: undefined method 'description' for "Door":String"
返回"NoMethodError: undefined method 'description' for "Door":String"
。
编辑 :
例如:
door = Item.new( :name => "Door", :description => "a locked door" ) key = Item.new( :name => "Key", :description => "a key" )
您需要提供代码设置的更多详细信息以获得一个好的答案(或者让我找出哪个问题是重复的:)。 $1
引用了哪种变量? 以下是一些猜测:
-
如果这实际上是同一实例上的方法,则可以通过以下方式调用此方法:
# Same as "self.foo" if $1 is "foo" self.send($1).description.downcase
-
如果这些是实例变量,那么:
# Same as "@foo.description.downcase" instance_variable_get(:"@#{$1}").description.downcase
-
如果这些是局部变量,则无法直接执行,您应该更改代码以使用哈希:
objs = { 'foo' => ..., 'key' => Item.new( :name => "Key", :description => "a key" ) } objs['jim'] = ... case some_str when /^read (.+)$/ puts "Reading #{$1}:" puts objs[$1].description.downcase end
我猜你用“读门”和/ ^ read(。+)$ /匹配了一个字符串。 所以$ 1 =“门”,它引发了上述错误。 如果你想要对该字符串进行包装 ,只需使用:
$ 1.downcase