在Ruby中使用Hash时除外,
None
我得到NoMethodError:
point
我做错了什么?
答案 0 :(得分:6)
except
是一个Rails方法(确切地说是ActiveSupport)。在Rails控制台中执行时,您的代码不会重现该错误:
> d = {}
# => {}
> d["a"]=1234
# => 1234
> d["b"]=34
# => 34
> d["c"]=3
# => 3
> d.except(:b,:c)
# => {"a"=>1234, "b"=>34, "c"=>3}
答案 1 :(得分:1)
没有Hash#except
。您可以按如下方式实现它:
d.reject { |k, v| ["b", "c"].include? k }
# => {"a"=>1234}
请注意,它不是具有无差别访问权限的哈希; "b"
与:b
不同。
答案 2 :(得分:0)
正如他们上面所说,没有方法'除'意味着您没有在此代码中的任何位置定义'except'。如果您需要更新如何构建哈希,那么一个好的就是:http://www.tutorialspoint.com/ruby/ruby_hashes.htm
答案 3 :(得分:0)
Hash#except
将在Ruby 3中使用
h = { a: 1, b: 2, c: 3 }
p h.except(:a) #=> {:b=>2, :c=>3}
https://www.ruby-lang.org/en/news/2020/09/25/ruby-3-0-0-preview1-released/