我无法让我的def函数识别它之前的哈希(字典)。我熟悉Python并且无法使用Ruby来实现同样的目标。
这是我的错误:
./engEsp.rb:12:in translate': undefined local variable or methodnumHash'
for main:Object (NameError)
from ./engEsp.rb:19:in `'
这是程序......
#!/usr/bin/env ruby
system "clear"
numHash = {}
def translate
print "Number in English: "
eng = gets.chomp
print "Numero en Espanol: "
esp = gets.chomp
numHash[eng] = esp
puts "Data has been added!"
puts numHash
translate
end
translate
答案 0 :(得分:1)
在Ruby中,当定义一个方法时,它会使用自己的一组局部变量获得自己的范围,因此在该方法之外定义的任何局部变量都不存在。
您可以通过将变量转换为实例变量来解决此问题:
#!/usr/bin/env ruby
system "clear"
@numHash = {}
def translate
print "Number in English: "
eng = gets.chomp
print "Numero en Espanol: "
esp = gets.chomp
@numHash[eng] = esp
puts "Data has been added!"
puts @numHash
translate
end
translate
这是有效的,因为translate()
被认为是“主”对象的一个方法(因为它是在main中声明的),所以你可以访问在“main”对象中声明的任何实例变量。
答案 1 :(得分:0)
只需将numHash = {}
声明为全局变量
$numHash = {}
现在在代码中的其他地方使用$numHash
Ruby中的全局变量可以从Ruby程序的任何位置访问,无论它们在何处声明。全局变量名称以美元符号($)为前缀。