Ruby新手问题:哈希

Nun*_*ado 3 ruby

我有以下内容

class test
 hash={}

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

test.new.printHash
Run Code Online (Sandbox Code Playgroud)

这打印:

1 
0 
1
Run Code Online (Sandbox Code Playgroud)

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

Pes*_*sto 10

你已经离开了标记,但它似乎正在做某事,因为它hash是一个内置函数,它返回对象的Fixnum哈希码.在Fixnum上使用方括号时,您将获得特定位.你想要做的是创建一个以sigil开头的实例变量@.此外,您必须在方法中创建实例变量,因此我们将使用在创建类的对象时调用的变量initialize:

class Test
  def initialize
    @hash = {}
  end

  def printHash 
      puts @hash[1]
      puts @hash[2]
      puts @hash[3]
  end
end
Run Code Online (Sandbox Code Playgroud)

现在你可以找到这nil三种打印件.要测试散列是否具有特定键的值,您可以使用has_key?.

  • 这是一个非常好的解释.在解决Euler问题之前,您可以尝试Ruby Koans:http://github.com/edgecase/ruby_koans/tree/master (2认同)