3

我看到有些人像这样使用哈希:

end_points = { "dev" => "http://example.com"}

在其他地方使用这个:

 end_points = { :dev => "http://example.com"}

这两种方法有什么区别?

4

3 回答 3

3

""声明一个String:声明一个Symbol。如果您使用的是散列,并且您不需要更改键的值或将其保留在任何地方,请使用符号。

查看内容以获得更详细的解释。

于 2012-09-19T21:55:20.700 回答
2

:dev是一个符号,'dev'是一个字符串。

大多数时候,使用符号,但两者都是正确的。一些关于这个主题的阅读:

什么是符号,我们如何使用它们?

为什么在 Ruby 中使用符号作为哈希键?

于 2012-09-19T21:55:29.793 回答
2

在第一种情况下,您在第二种情况下使用字符串,您使用符号。符号是 Ruby 中的特定类型。在整个程序中只有一个符号实例,但字符串可以有很多。IE

> :sym.__id__
=> 321608
> :sym.__id__
=> 321608
> "sym".__id__
=> 17029680
> "sym".__id__
=> 17130280

如您所见,符号始终具有相同的 ID,这意味着它始终是同一个对象,但字符串每次都是新字符串在新的内存位置。这就是为什么符号作为散列键更常见的原因,它只是更快。

于 2012-09-19T21:57:18.060 回答