1

所以,我是红宝石的新手,对它非常好奇。我来自python。在 python 中,我会这样做以查看字典中是否存在某些内容。

dictionary = dict()
dictionary['key'] = 5
def inDictionary(key):
    if key in dictionary:
       execute code
    else:
        other code

对我来说相当简单,另一方面,在 ruby​​ 中我将如何做到这一点?我一直在尝试像

dictionary = Hash.new
dictionary['key'] = 5
def isDictionary(key)
    if dictionary.has_key?(key)
       puts 'has key'
    end
end

我收到错误,isDictionary 未定义的局部变量或方法“字典”。我在做什么错,并提前感谢。

4

2 回答 2

5

在 Ruby 中defclass、 和module关键字开始新的本地范围。这意味着dictionary在此函数中无法访问变量(定义为本地变量)isDictionary,因为最新版本有其自己的范围。

当然,您可以使用$sigil 标记您的变量以使其成为全局变量,但您最好不要这样做。Ruby 的全部意义在于使对象——数据的集合和处理/转换该数据的方法——尽可能地“与生俱来”。

在这种情况下,最自然的解决方案是定义类 Dictionary,将字典作为其实例变量(使用@sigil),然后在类方法 isDictionary 中访问该变量。

于 2013-09-18T23:51:06.250 回答
1

尝试这个

@dictionar­y = Hash.­new
@dictionar­y['key'] = 5
def isDic­tionary(ke­y)
    if @dict­ionary.has­_key?(key)­
       puts 'has key'
    end
end

isDictionary("key")

我所做的是dictionary通过将变量转换为实例变量来增强变量的范围@dictionary

于 2013-09-18T23:55:42.603 回答