2017-04-21 76 views
1

我不能让我的def函数识别它之前的散列(字典)。我对Python很熟悉,无法与Ruby一起工作。Ruby def函数不能定义局部变量

这是我的错误:

./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 

回答

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()被认为是“主”对象的方法(因为它是在主要的声明),所以您可以:

你可以把你的变量为实例变量解决这个问题访问也在“主”对象中声明的任何实例变量。

0

刚刚宣布numHash = {}为全局变量

$numHash = {} 

现在的代码在Ruby中

全局变量都可以访问任何地方在Ruby程序中使用$numHash其他地方,不管它们声明的位置。全局变量名称以美元符号($)为前缀。