簡體   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