这可能是您在编程101中学到的。
免责声明:我没有正式的编程培训。我是自学成才。
对我来说,文字哈希就像this网站建议的那样:第三个可编辑的哈希称为“咸牛肉哈希”。
在Ruby中,您有两种数据类型:
为什么一个人称为文字?是因为你真的输入了关联数组吗?上述网站声称这是因为定义是内联的。如果是这样,为什么当你可以像这样输入哈希时,哈希也不会被称为文字:
states = Hash.new
states["CA"] = "California"
states["MA"] = "Massachusetts"
states["NY"] = "New York"
states["MA"].reverse #=> "sttesuhcassaM"
答案 0 :(得分:15)
数据类型只有一个:Hash
。 Hash
是一个班级。您可以实例化对象并使用它们
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 >