繁体   English   中英

在块外访问变量

[英]accessing variables outside block

我有以下代码:

grades = ["Slect", "Choice", "Prime"]
names = grades.map{ |j| j.downcase }
names.zip(grades) do |r,n|
    r = Steak.new
    r.grade = n
    r
end

ObjectSpace.each_object(Steak) {|x| p x}

显示Steak有3个实例,并且等级得到正确的分配值。

但是我无法访问例如块外的choice

有什么解决办法吗?

通常,您可以通过执行一系列构建数据的转换来解决此问题。 您对r所做的更改将被忽略,只是重新分配一个局部变量,该变量随后将被丢弃,因为您实际上并未将其附加到任何对象上。

更好的方法是使用正确的密钥将其作为哈希返回:

class Steak
  attr_accessor :grade
end

grades = [ "Select", "Choice", "Prime" ]

map = Hash[
  grades.map do |grade|
    steak = Steak.new
    steak.grade = grade.downcase

    [ grade, steak ]
  end
]

# => {"Select"=>#<Steak:0x007fc6ef01bd60 @grade="select">, "Choice"=>#<Steak:0x007fc6ef01bcc0 @grade="choice">, "Prime"=>#<Steak:0x007fc6ef01bc20 @grade="prime">}

“访问块外部的变量”的唯一方法是确保该块返回数据,或者在该块之前定义变量,使其成为闭包的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM