我是初学者,正在尝试学习ruby,我正在编写以下问题陈述的代码: - 创建一个最初为空的字典。 - 添加条目..单词应该是键,含义应该是值。 - 添加包含关键字和定义的整个条目(添加单词时,应检查它是否已存在) - 添加没有定义的关键字(在这种情况下,将定义设置为nil) - 可以检查给定的关键字是否存在 - 查找关键字条目并返回关键字+定义 - 从前缀中查找多个匹配并返回整个条目(关键字+定义) - 即如果我们搜索“fi”,则它应返回以“fi”开头的所有条目 - 按字母顺序列出关键字
到目前为止,我已经编写了以下代码,但是当我添加关键字和值时,它只存储最后添加的值。在下面的例子中,输出是“@word_list = {”great“=>”非常“}>”。第一组价值观丢失了。
我不知道如何解决这个问题。任何帮助都会很棒。谢谢!
class Dictionary
def word_list
@word_list = Hash.new
end
def add new_entry
case new_entry
when Hash
word_list.merge!(new_entry)
when String
word_list[new_entry] = nil
end
end
d1 = Dictionary.new
d1.add ({"fish" => "aquatic animal", "fiend" => "bad person"})
d1.add ({"great" => "remarkable"})
puts d1.inspect
答案 0 :(得分:1)
每次调用word_list
时,您都会创建一个新的哈希,用空哈希替换@word_list
中的任何内容。
def word_list
@word_list = Hash.new
end
请尝试使用||=
,当Hash.new
完成时,没有理由在{}
使用a ||= b
。当然,a = a || b
表示def word_list
@word_list ||= {}
end
表示@word_list
,如果该值尚未设置,则仅使用该值。
initialize
或许最好不要懒惰地初始化class Dictionary
def initialize
@word_list = {}
end
def word_list
@word_list
end
# other methods...
end
,因为没有单词列表的字典根本就没有字典。而是在{{1}}方法中创建内部哈希,以便每个实例始终都有一个。
{{1}}