我有以下
class test
hash={}
def printHash
puts hash[1]
puts hash[2]
puts hash[3]
end
end
test.new.printHash
打印:
1
0
1
为什么会这样?如何测试我是否在哈希的那个位置放了一些东西?或者我错过了什么
答案 0 :(得分:10)
你已经离开了标记,但似乎正在做某事,因为hash
是builtin 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”之后调用)中指定它,它将在整个对象实例中可用。