哈希has_key?句法

Mic*_*cka 2 ruby syntax hash

我有三个哈希:

a = {key:"value"}
b = {"key"=>"value"}
c = {:key=>"value"}
Run Code Online (Sandbox Code Playgroud)

而这些结果:

a.has_key?("key") # => false
b.has_key?("key") # => true
c.has_key?("key") # => false
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 为什么?这是什么行为?
  • 我如何获得a,b并使用相同的语法c返回true所有这些?

Ser*_*sev 15

有字符串,有符号.字符串不是符号.

这些哈希包含一个符号作为键:

{key: "value"}
{:key => "value"}
Run Code Online (Sandbox Code Playgroud)

此哈希包含一个字符串作为键:

{"key"=>"value"}
Run Code Online (Sandbox Code Playgroud)

这就是为什么你的测试表现得像他们一样.

Rails有一个Hash包装器,叫做HashWithIndifferentAccess.如果您有其中一个,则可以通过字符串或符号访问值.但对于常规哈希,有区别.

require "active_support/core_ext"

h = {key: "value"}.with_indifferent_access

h.has_key?(:key) # => true
h.has_key?("key") # => true
Run Code Online (Sandbox Code Playgroud)