为什么我没有在Ruby中获得相同的输出

Sad*_*der 0 ruby hashmap

在两种情况下,我没有获得一致的输出:

场景1:

humen = {"hand" => 1, "eye" => 2, "head" => 3, "hair"=>4}
puts  "enter any body part name"
internal = gets.chomp.downcase.to_s

body = humen[internal]

puts body
#if input is "eye", it comes out 2
Run Code Online (Sandbox Code Playgroud)

场景2:

humen = {hand:1, eye:2, head:3, hair:4}
puts  "enter any body part name"
internal = gets.chomp.downcase.to_s

body = humen[internal]

puts body
Run Code Online (Sandbox Code Playgroud)

我在irb控制台中看不到任何东西.任何人都可以解释为什么会这样吗?

kid*_*ils 6

钥匙是第二种情况下的符号 -

{:hand=>1, :eye=>2, :head=>3, :hair=>4}
Run Code Online (Sandbox Code Playgroud)

而是internal一个字符串. humen[internal]期望分配给内部的字符串出现在散列中humen,而不是这种情况.

:hand != 'hand'

您应该将字符串转换为符号:

humen[internal.to_sym]
Run Code Online (Sandbox Code Playgroud)

String#to_sym 将字符串转换为符号.