所以,我是红宝石的新手并且非常好奇。我是从python出来的。在python中,我会这样做,看看字典中是否存在某些内容。
dictionary = dict()
dictionary['key'] = 5
def inDictionary(key):
if key in dictionary:
execute code
else:
other code
对我来说相当简单,另一方面,在红宝石中我该怎么做?我一直在尝试像
这样的东西dictionary = Hash.new
dictionary['key'] = 5
def isDictionary(key)
if dictionary.has_key?(key)
puts 'has key'
end
end
我得到错误,isDictionary未定义局部变量或方法“字典”。我做错了什么,并提前感谢。
答案 0 :(得分:5)
在Ruby中,def
,class
和module
关键字会启动新的本地范围。这意味着dictionary
变量(定义为本地)在此isDictionary
函数中不可访问,因为最新版本具有自己的范围。
当然,您可以使用$
sigil标记您的变量,以使其变为全局变量,但您最好不要这样做。 Ruby的重点在于制作对象 - 数据集合和处理/转换数据的方法 - 尽可能“天生”。
在这种情况下,最自然的解决方案是定义类Dictionary,使字典成为其实例变量(带@
sigil),然后在类方法isDictionary中访问此变量。
答案 1 :(得分:1)
试试这个
@dictionary = Hash.new
@dictionary['key'] = 5
def isDictionary(key)
if @dictionary.has_key?(key)
puts 'has key'
end
end
isDictionary("key")
我所做的是通过将dictionary
变量转换为实例变量@dictionary
来增强{{1}}变量的范围。