为什么Ruby中的哈希文字称为哈希文字?

时间:2017-06-26 12:47:37

标签: ruby hash

这可能是您在编程101中学到的。

免责声明:我没有正式的编程培训。我是自学成才。

对我来说,文字哈希就像this网站建议的那样:第三个可编辑的哈希称为“咸牛肉哈希”。

enter image description here

在Ruby中,您有两种数据类型:

  • 散列
  • 哈希文字

为什么一个人称为文字?是因为你真的输入了关联数组吗?上述网站声称这是因为定义是内联的。如果是这样,为什么当你可以像这样输入哈希时,哈希也不会被称为文字:

states = Hash.new

states["CA"] = "California"
states["MA"] = "Massachusetts"
states["NY"] = "New York"

states["MA"].reverse #=> "sttesuhcassaM"

3 个答案:

答案 0 :(得分:15)

数据类型只有一个:HashHash是一个班级。您可以实例化对象并使用它们

h = Hash.new
h.store("CA", "California")
h["MA"] = "Massachusetts"

文字只是一种快捷方式,可让您在不明确使用该类的情况下创建该类的对象。

h = { "CA" => "California", "MA" => "Massachusetts" }

Array s

相同
a = Array.new
a.push(1)
a << 2

或者,使用array文字

a = [1, 2]

答案 1 :(得分:4)

你的困惑源于这种误解:

  

在Ruby中,您有两种数据类型:

     
      
  • 散列
  •   
  • 哈希文字
  •   

首先,Ruby核心中有更多的数据结构。

但其次,没有#34;字面哈希&#34;。哈希文字引用语法糖来定义哈希,即字面意思。

public static class FormExtensions
{
    // Slightly shorter name
    public static Form ShowAndFront(this Form form)
    {
        form.Show();
        form.BringToFront();

        return form;
    }
}

它们完全相同。唯一的区别是一个更方便,而另一个更有活力。

答案 2 :(得分:1)

文字是固定值。

它无法编辑,除非您将其分配给变量然后修改它(当然,当然您实际上并没有修改文字)。

https://en.wikipedia.org/wiki/Literal_(computer_programming)

因此,您可以为变量指定文字,将变量与文字进行比较,比较两个文字,但通常不能直接修改文字。

编辑:请注意,修改文字的情况最终会创建一个新对象,与对变量执行的操作不同。

2.2.5 :001 > "foo".upcase!
 => "FOO" 
2.2.5 :002 > "foo".object_id
 => 2204993280 
2.2.5 :003 > "foo".upcase!.object_id
 => 2204964760 
2.2.5 :004 > x = "foo"
 => "foo" 
2.2.5 :005 > x.object_id
 => 2204927520 
2.2.5 :006 > x.upcase!.object_id
 => 2204927520 
2.2.5 :007 >