Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何使用字符串在哈希中查找符号_Ruby_String_Hash_Key - Fatal编程技术网

Ruby 如何使用字符串在哈希中查找符号

Ruby 如何使用字符串在哈希中查找符号,ruby,string,hash,key,Ruby,String,Hash,Key,我有一个字符串: category = "cupcakes" 我需要查看此哈希是否将转换为符号的字符串作为键: products = { :cupcakes => [{:title => "chocolate", :flavor => "chocolate"}, {:title => "summer special", :flavor => "pink cake"}], :cookies => [{:title => "chocolate bl

我有一个字符串:

category = "cupcakes"
我需要查看此哈希是否将转换为符号的字符串作为键:

products = {
  :cupcakes => [{:title => "chocolate", :flavor => "chocolate"}, {:title => "summer special", :flavor => "pink cake"}],
  :cookies => [{:title => "chocolate bliss", :flavor => "chocolate chip"}, {:title => "breakfast surprise", :flavor => "oatmeal raisin"}]
}
这一个不起作用,因为类别是字符串,而不是符号

products.key?(category)
这一个不起作用,因为
:cupcake
是一个独特的符号,我们只是在创建另一个符号

products.key?(category.to_sym)

我认为这是因为对符号如何工作的误解。具有相同内容的每个符号都是完全相同的,只要具有相同的
对象id
。不同内容的符号总是不同的。这与字符串不同,字符串的内容可能相同,但对象id不同,或者一个字符串在某一时刻可能包含一个内容,而下一时刻,尽管对象id相同,但内容却完全不同

Ruby的
object\u id
值就是它们所说的“对象标识符”,是表示“对象编号”的一种方式

现在字符串
“cupcake”
和符号
:cupcake
不一样:

  "cupcake" == :cupcake
  # => false
如果您进行转换,它们是:

  "cupcake".to_sym == :cupcake
  # => true
真正的问题是你期望
:纸杯蛋糕
:纸杯蛋糕
是一样的东西。Ruby不理解英语规则和语义,所以就其而言,这是两件完全不同的事情

如果您使用的是ActiveSupport,则可以执行以下操作:

"cupcake".pluralize.to_sym == :cupcakes
# => true
这需要一个额外的库,但好消息是默认情况下它附带了Rails之类的东西

在任何情况下,您定义数据的方式都需要将其引用为:

products[:cupcakes]
products["cupcake".to_sym]
products["cupcake".pluralize.to_sym]

类别是单数还是复数?“我们只是在创造另一个符号”–不,每个符号都是指同一个对象。它不起作用,因为您的密钥是
:cupcakes
(带“s”)。@stefan,我修复了o型(复数“s”)我无法访问:cupcake,因为用户将要输入一个字符串,我需要使用此字符串访问:cupcake谢谢您的帮助。我修复了o型(缺少s),现在我的代码可以工作了。感谢您对符号的澄清。一个小小的o型可以让初学者在相当长的一段时间内感到迷茫,所以这真的很有帮助!关于Ruby最令人困惑的事情之一是符号和字符串。很高兴我能帮忙。