2017-04-21 77 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其他地方,不管它們聲明的位置。全局變量名稱以美元符號($)爲前綴。