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

Jon*_*mar 3 ruby hash

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

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

对我来说,文字哈希就像这个网站建议的:第三个可编辑的哈希称为"corned beef hash".

在此输入图像描述

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

  • 哈希
  • 哈希文字

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

states = Hash.new

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

states["MA"].reverse #=> "sttesuhcassaM"
Run Code Online (Sandbox Code Playgroud)

Urs*_*sus 15

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

h = Hash.new
h.store("CA", "California")
h["MA"] = "Massachusetts"
Run Code Online (Sandbox Code Playgroud)

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

h = { "CA" => "California", "MA" => "Massachusetts" }
Run Code Online (Sandbox Code Playgroud)

同样Array

a = Array.new
a.push(1)
a << 2
Run Code Online (Sandbox Code Playgroud)

或者,用array文字

a = [1, 2]
Run Code Online (Sandbox Code Playgroud)


ndn*_*kov 5

您的困惑源于这种误解:

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

  • 散列
  • 散列文字

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

但其次,没有“文字哈希”这样的东西。散列文字是指用于在适当位置定义散列的语法糖,也就是字面意思。

# This is a hash literal
x = {foo: 42, bar: :baz}

# This is not a hash literal
x = Hash.new
x[:foo] = 42
x[:bar] = :baz
Run Code Online (Sandbox Code Playgroud)

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