我制作了一个简单的哈希获取应用程序,该应用程序根据用户输入的第一个字符来检索邮政编码区域。但我不断收到这个错误
postal_codes中
lookup_code': undefined local variable or method
的main:Object(NameError)中的postal_code_lookup.rb:27:在您的意思是?邮政编码
我很困惑,因为我已经声明了变量,并且在循环中应该可以使用它。
postal_codes = {
V: "British Columbia",
Y: "Yukon Territory",
X: "Northwest Territory",
T: "Alberta",
S: "Saskatechewan",
R: "Manitoba",
P: "Northern Ontario",
M: "Toronto",
L: "Central Ontario",
K: "Eastern Ontario",
J: "Western & Northern Quebec",
N: "Western Ontario",
G: "Eastern Quebec",
H: "Metroplitan Montreal",
A: "Newfoundland & Labradour",
C: "Prince Edward Island",
E: "New Brunswick",
B: "Nova Scotia"
}
def lookup_code(postal_code)
territory = postal_codes.fetch(postal_code[0].upcase.to_sym)
puts "Your address is in #{territory}"
end
loop do
puts "Do you want to lookup a postal code?(Y/n)"
prompt = gets.chomp.downcase
if prompt != "y"
break
end
print "Enter your postal code > "
postal_code = gets.chomp
lookup_code(postal_code)
end
我对这里的范围不了解什么?
方法引入了新的范围。它们不是闭包:不应期望父作用域的局部变量可以在嵌套作用域中访问。
POSTAL_CODES = {
V: "British Columbia",
# SKIPPED
B: "Nova Scotia"
}
def lookup_code(postal_code)
territory = POSTAL_CODES.fetch(postal_code[0].upcase.to_sym)
puts "Your address is in #{territory}"
end
尽管您没有课程,但这里有main
,它是的一个特殊实例Object
,始终定义为:
@postal_codes = {
V: "British Columbia",
# SKIPPED
B: "Nova Scotia"
}
def lookup_code(postal_code)
territory = @postal_codes.fetch(postal_code[0].upcase.to_sym)
puts "Your address is in #{territory}"
end
$postal_codes = {
V: "British Columbia",
# SKIPPED
B: "Nova Scotia"
}
def lookup_code(postal_code)
territory = $postal_codes.fetch(postal_code[0].upcase.to_sym)
puts "Your address is in #{territory}"
end
一个人可能会在这里创建一个类并使用它的实例:
class Lookup
def postal_codes
@postal_codes ||= {
V: "British Columbia",
# SKIPPED
B: "Nova Scotia"
}
end
def lookup_code(postal_code)
territory = postal_codes.fetch(postal_code[0].upcase.to_sym)
puts "Your address is in #{territory}"
end
end
Lookup.new.lookup_code("01234")
def lookup_code(postal_code)
territory = {
V: "British Columbia",
# SKIPPED
B: "Nova Scotia"
}.fetch(postal_code[0].upcase.to_sym)
puts "Your address is in #{territory}"
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句