到目前为止,我一直在创建哈希(按照Codecademy)
my_hash = {
"pay" => "low",
"vacation" => "yes",
"parking" => "no"
}
这是rubymonk创建哈希的新方便方法。
chuck_norris = Hash[:punch, 99, :kick, 98, :stops_bullets_with_hands, true]
第二个技术中的冒号是语法的一部分还是字符串的一部分?如果它们只是字符串的一部分,为什么不是引号中的字符串?
答案 0 :(得分:2)
第二个技术中的冒号是语法的一部分还是字符串的一部分?
:
不是 Hash 创建语法的一部分,您可以在那里看到它,因为您的第二个示例使用符号作为键。 :punch,:kick,:stops_bullets_with_hands是Symbol
个对象。Hash::[]
是用于创建Hash对象的方法。
Hash[:punch, 99, :kick, 98, :stops_bullets_with_hands, true]
|_________| |________|
(key,value) (key,value)
在第二个示例中,键被视为符号。但你也可以使用string,fixnum等。
答案 1 :(得分:0)
第二个技术中的冒号是语法的一部分还是字符串的一部分?如果它们只是字符串的一部分,为什么不是引号中的字符串?
看看Rubydoc,我们可以看到Hash::[]
方法有三种形式:
Hash[ key, value, ... ] → new_hash
Hash[ [ [key, value], ... ] ] → new_hash
Hash[ object ] → new_hash
您的具体示例是第一种情况的实例,其中对象列表被解释为键值对。所以打电话:
Hash[a, b, c, d, e, f]
将配对:
我认为您对:
语法感到困惑,您可以在此easily take a look at处理一些主题。总结一下:在这种情况下,:
会构造一个Symbol
对象。
总结:
Hash[:punch, 99, :kick, 98, :stops_bullets_with_hands, true]
可以表示为以下哈希:
{
:punch => 99,
:kick => 98,
:stops_bullets_with_hands => true
}
其中:punch
,:kick
和:stops_bullets_with_hands
是符号,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"