Ruby &引用;“方便”;创建散列的方法

Ruby &引用;“方便”;创建散列的方法,ruby,Ruby,以下是我到目前为止如何创建哈希(根据Codecademy) 下面是rubymonk新的创建哈希的便捷方法 chuck_norris = Hash[:punch, 99, :kick, 98, :stops_bullets_with_hands, true] 第二种技术中的冒号是语法的一部分还是字符串的一部分?如果它们只是字符串的一部分,为什么字符串不加引号呢 第二种技术中的冒号是语法的一部分还是字符串的一部分 :不是散列创建语法的一部分,您可以在第二个示例中看到它,即使用符号作为键打孔、踢腿、

以下是我到目前为止如何创建哈希(根据Codecademy)

下面是rubymonk新的创建哈希的便捷方法

chuck_norris = Hash[:punch, 99, :kick, 98, :stops_bullets_with_hands, true]
第二种技术中的冒号是语法的一部分还是字符串的一部分?如果它们只是字符串的一部分,为什么字符串不加引号呢

第二种技术中的冒号是语法的一部分还是字符串的一部分

不是散列创建语法的一部分,您可以在第二个示例中看到它,即使用符号作为键打孔、踢腿、止步、子弹和双手都是
Symbol
对象。用于创建哈希对象的方法

Hash[:punch, 99, :kick, 98, :stops_bullets_with_hands, true]
     |_________| |________|
     (key,value) (key,value)
在第二个示例中,键被视为符号。但您也可以使用string、fixnum等

第二种技术中的冒号是语法的一部分还是字符串的一部分?如果它们只是字符串的一部分,为什么字符串不加引号呢

查看Rubydoc,我们可以看到
散列::[]
方法有三种形式:

Hash[ key, value, ... ] → new_hash
Hash[ [ [key, value], ... ] ] → new_hash
Hash[ object ] → new_hash
您的特定示例是第一种情况的一个实例,其中对象列表被解释为键值对。所谓:

Hash[a, b, c, d, e, f]
将配对:

  • a=>b
  • c=>d
  • e=>f
我想你被
语法弄糊涂了,你可以在这里讨论一些主题。总结一下:本例中的
构造了一个对象

总之:

Hash[:punch, 99, :kick, 98, :stops_bullets_with_hands, true]
可以表示为以下哈希:

{
    :punch => 99,
    :kick => 98,
    :stops_bullets_with_hands => true
}
其中,
:打孔
:踢
:用手停止子弹
是符号,
99
98
true
是相应的值

要返回值,只需使用如下
Hash#[]
方法:

chuck_norris[:punch] # 99
chuck_norris[:kick] # 98
chuck_norris[:stops_bullets_with_hands] # true
请记住,您可以通过
#to_s
方法将符号转换为字符串:

:punch.to_s # "punch"
:kick.to_s # "kick"
:stops_bullets_with_hands.to_s # "stops_bullets_with_hands"

啊-课程中引入了全新的对象类型,没有任何警告!因此,它们不是创建哈希的语法的一部分。我应该把:punch、:kick等看作是整数或字符串。对吗?@Taymon How<代码>散列::[]方法只需要
(键,值)
对,键,值的组合应该是什么对象并不重要。这应该在Rubymonk论坛上。但没有这样的论坛。问题是,他们将符号(带冒号)引入了一堂关于使用新技术创建哈希的基础课。冒号看起来像是新语法的一部分。谢谢你把它清理干净,先生们!它与哈希无关,它确实是一个副本。不知道它们是符号和物体。我现在就去读那篇文章。谢谢
:punch.to_s # "punch"
:kick.to_s # "kick"
:stops_bullets_with_hands.to_s # "stops_bullets_with_hands"