在Ruby中,为什么我需要定义散列,但不要';你不需要定义变量吗?

在Ruby中,为什么我需要定义散列,但不要';你不需要定义变量吗?,ruby,hash,Ruby,Hash,我是说,我没有申报 my_var = new variable 或者类似的。 我只是和你一起去 my_var = 1; 同样,为什么我不能 books["War and peace"] = :masterpiece 为什么我需要提前定义 books = {} 做: 正在定义和分配局部变量。使用散列可以这样做: books = { 'War and Peace' => :masterpiece } books[“War and peace”]=:majorite调用books上的[

我是说,我没有申报

my_var = new variable
或者类似的。 我只是和你一起去

my_var = 1;
同样,为什么我不能

books["War and peace"] = :masterpiece
为什么我需要提前定义

books = {}
做:

正在定义和分配局部变量。使用散列可以这样做:

books = { 'War and Peace' => :masterpiece }
books[“War and peace”]=:majorite
调用
books
上的
[]=
方法,其中
“War and peace”
:majorite
作为其参数。如果
books
不存在,则不能对其调用方法


或者用另一种方式来解决这个问题:如果ruby确实做了一些魔术来自动初始化变量,那么当您在变量上使用
[]=
时,ruby怎么知道您希望
书籍
在上面的示例中成为散列呢?任何类都可以有
[]
[]=
运算符,它们接受字符串作为索引。

因此,请说明,
1
是数字文本,
{‘战争与和平’=>:杰作}
是散列文本。因此,这里的两个语句具有完全相同的形式,就像
name=“John”
list=[1,2,3,4]
一样。如果您需要创建一个没有内置文本语法的对象类型,例如
x=Set.new([1,2,3,4])
,那么它只会变得更复杂。
books = { 'War and Peace' => :masterpiece }