在Ruby中,为什么我需要定义一个哈希,但不需要定义变量?

avj*_*avj 2 ruby hash

我的意思是,我不申报

my_var = new variable
Run Code Online (Sandbox Code Playgroud)

或类似的东西.我跟你一起去

my_var = 1;
Run Code Online (Sandbox Code Playgroud)

同样,为什么我不能

books["War and peace"] = :masterpiece
Run Code Online (Sandbox Code Playgroud)

为什么我需要提前定义?

books = {}
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 8

books["War and peace"] = :masterpiece调用[]=方法on bookswith "War and peace":masterpiece作为参数.如果books不存在,则无法在其上调用方法.

或者以不同的方式处理问题:如果ruby确实做了一些魔法来自动初始化变量,当你使用[]=它们时,ruby应该如何知道你想books成为上面例子中的哈希?任何类都可以拥有[][]=运营商,其接受字符串作为索引.


Mau*_*res 7

这样做:

my_var = 1
Run Code Online (Sandbox Code Playgroud)

定义和分配局部变量.使用哈希可以这样做:

books = { 'War and Peace' => :masterpiece }
Run Code Online (Sandbox Code Playgroud)