gpt4 book ai didi

ruby - 如何获取 Ruby 哈希以删除输出中的大括号

转载 作者:太空宇宙 更新时间:2023-11-03 16:27:02 24 4
gpt4 key购买 nike

我开始在 Test-First 上解决一些示例问题,并制定了一个解决方案,该解决方案通过了使用 Ruby 1.8.7 的所有 RSpec 测试。我刚刚升级了我的操作系统,Ruby 也升级了;我的代码不再通过 RSpec 测试。谁能帮我理解为什么这不再起作用了?

我的代码

  def entries 
@d
end

错误信息

失败:

1) 词典可以添加带有关键字和定义的整个词条

Failure/Error: @d.entries.should == {'fish' => 'aquatic animal'}
expected: {"fish"=>"aquatic animal"}
got: {["fish"]=>["aquatic animal"]} (using ==)

差异:

 @@ -1,2 +1,2 @@
-"fish" => "aquatic animal"
+["fish"] => ["aquatic animal"]

#

我不知道要更改格式。 (RSpec 测试之一是 @d 在创建时必须为空,所以当我尝试通过显式格式化来修改 @d 时它也失败了,但我想这里有一个简单的类型问题我不是理解。)

更新:更多代码

class Dictionary
def initialize d = {}
@d = d
end

def entries
@d
end

def keywords
@d.keys.sort
end

def add words
n_key = words.keys
n_val = words.values
@d[n_key] = n_val
end
end

最佳答案

看起来您正在尝试通过一次添加多个单词来进行某种批量分配,但这不是实现此操作的方法。

Ruby 哈希可以将任何 作为键,这包括事物数组。它不像 JavaScript 会自动转换为字符串,也不像其他语言具有相同类型的转换为特定字典键类型。在 Ruby 中,任何对象都可以。

所以你的加词方法应该是:

def add words
words.each do |word, value|
@d[word] = value
end
end

请注意,使用像 @d 这样的名称是非常糟糕的形式。尝试更具体地说明那是什么,否则你可能会无休止地混淆人们。充满诸如 @dxS 之类的程序很难调试和维护。与其简洁和模棱两可,不如说清楚一点。

其次,不清楚您的Dictionary 类与Hash 本身有何不同。也许你可以把它变成一个子类并为自己省去一些麻烦。例如:

class Dictionary < Hash
def keywords
keys.sort
end

def add words
merge!(words)
end
end

一般而言,最好始终使用核心 Ruby 类来执行您想要的操作,然后从那里构建。重新发明轮子会导致不兼容和挫败感。内置的 Hash 类有一大堆实用方法,可以非常方便地进行数据转换、转换和迭代,而创建自己的不透明包装类会丢失这些东西。

merge!方法特别是将数据添加到现有哈希中,这正是您想要的。

关于ruby - 如何获取 Ruby 哈希以删除输出中的大括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22927268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com