Ruby新手问题:哈希

时间:2009-05-11 13:51:45

标签: ruby

我有以下

class test
 hash={}

  def printHash 
      puts hash[1]
      puts hash[2]
      puts hash[3]
    end
end

test.new.printHash

打印:

1 
0 
1

为什么会这样?如何测试我是否在哈希的那个位置放了一些东西?或者我错过了什么

2 个答案:

答案 0 :(得分:10)

你已经离开了标记,但似乎正在做某事,因为hashbuiltin function,它返回对象的Fixnum哈希码。在Fixnum上使用方括号时,您将获得value of the specific bit。你想要做的是创建一个以sigil @开头的实例变量。此外,您必须在方法中创建实例变量,因此我们将使用在创建类的对象时调用的那个变量initialize

class Test
  def initialize
    @hash = {}
  end

  def printHash 
      puts @hash[1]
      puts @hash[2]
      puts @hash[3]
  end
end

现在你会发现这三个都打印nil。要测试散列是否具有特定键的值,可以使用has_key?

答案 1 :(得分:0)

基本上'hash'超出了范围,你在printHash函数中引用的是一个完全不同的对象,通常它将是nil(一个新的未分配对象)但是Pesto指出'hash'是一个内置函数 - 有点混淆这个解释。

通过在变量前加上一个“@”符号并在初始化方法(在“new”之后调用)中指定它,它将在整个对象实例中可用。