协助ruby def

时间:2013-09-18 23:44:00

标签: python ruby

所以,我是红宝石的新手并且非常好奇。我是从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未定义局部变量或方法“字典”。我做错了什么,并提前感谢。

2 个答案:

答案 0 :(得分:5)

在Ruby中,defclassmodule关键字会启动新的本地范围。这意味着dictionary变量(定义为本地)在此isDictionary函数中不可访问,因为最新版本具有自己的范围。

当然,您可以使用$ sigil标记您的变量,以使其变为全局变量,但您最好不要这样做。 Ruby的重点在于制作对象 - 数据集合和处理/转换数据的方法 - 尽可能“天生”。

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

答案 1 :(得分: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来增强{{1}}变量的范围。