Ruby def函数不能定义局部变量

时间:2017-04-21 17:24:19

标签: ruby

我无法让我的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

2 个答案:

答案 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程序的任何位置访问,无论它们在何处声明。全局变量名称以美元符号($)为前缀。