2017-04-21 15 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 `' 

プログラムは、メソッドが定義されている場合、それは地元の独自のセットで独自のスコープを取得し、... 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 

答えて

1

ですそのメソッドの外で定義されたローカル変数は存在しません。

あなたはインスタンス変数にあなたの変数を回すことによってこの問題を解決することができます

#!/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」オブジェクトでも宣言されているインスタンス変数にアクセスします。

0

はちょうど

$numHash = {} 

が今にかかわらず、それらが宣言されているところの、Rubyで

グローバル変数はRubyプログラムのどこからでもアクセス可能なコードの別の場所で$numHashを使用するグローバル変数としてnumHash = {}を宣言する。グローバル変数名の前にはドル記号($)が付いています。

関連する問題