某些代码示例的符号为element:
,其他时间的语法为:element
。我找到了符号here的定义,但我不确定:element
是什么。我的理解是符号就像一个常数。但是其他语法是什么意思呢?
答案 0 :(得分:4)
符号在Ruby中被定义为“内化字符串”,或者换句话说,是一个字符串单例。它们有一些有趣的属性,但最重要的是它们对内存的影响非常小。
任何给定的符号,如:example
,与该符号的每个其他实例都是同一个对象。对于"example"
和"example"
在内容方面可能相同但在对象方面不同的字符串,情况并非如此。 Ruby通过内部object_id
来识别对象:
"example".object_id == "example".object_id
# => false
:example.object_id == :example.object_id
# => true
这使得它们非常适合用作哈希作为键,用于考虑内存效率和性能的标志。
比较两个符号非常容易。他们要么是同一个对象,要么不是。对于字符串,需要进行大量额外的工作来评估它们是否相同,需要比较每个字符,并且因为它们可以包含任意的UTF或二进制数据,所以这并不总是很简单。
要注意的一件事是,你应该只使用你输入内容的符号,“象征”任意值是浪费。例如,如果您的哈希包含UUID作为键,那么不太可能重复的东西,将其存储为字符串。一般来说,每个符号在程序期间都保留在Ruby内存中,因此您只需为符号本身支付一小笔费用。
但是,如果你声明了数百万的成本,这个成本可能会增加。如果符号只被用过一次会导致大量过多的内存使用,从而无法实现目的。
答案 1 :(得分:0)
正如Sagar所指出的,符号的一个用例是使用符号作为哈希的键。它对性能,使用某个键的500个实例进行成像很有帮助,实际上你需要的只是一个,因为它识别哈希中的键。
它还可以用于方法调用和设置getter / setter等。
基本上,符号只是一个无法更改的字符串。
答案 2 :(得分:0)
a: 'b'
是:a => 'b'
的快捷方式。这就是全部。