符号文字的语法

Syntax for symbol literal

一些代码示例的符号为 element:,而其他时候语法为 :element。我找到了符号 here 的定义,但我不确定 :element 是什么。我的理解是符号就像一个常数。但是其他语法是什么意思?

正如 Sagar 所指出的,符号的一个用例是将符号用于哈希的键。它对性能很有帮助,使用某个键的 500 个实例进行成像,实际上您只需要一个,因为它正在识别哈希中的键。

它也可以用于方法调用和设置 getters/setters 等等。

基本上符号只是一个字符串,不能改变。

Symbol 在 Ruby 中被定义为 "internalized string",或者换句话说,各种字符串单例。它们有一些有趣的特性,但最重要的是它们对内存的影响非常小。

任何给定的符号,如 :example,与该符号的所有其他实例都是同一对象。对于 "example""example" 在内容方面可能相同但在对象方面不同的字符串,情况并非如此。 Ruby 通过内部 object_id:

识别对象
"example".object_id == "example".object_id
# => false
:example.object_id == :example.object_id
# => true

这使得它们非常适合在散列中用作键,用于内存效率和性能受关注的标志。

比较两个符号非常容易。它们要么是同一个对象,要么不是。对于字符串,需要做很多额外的工作来评估它们是否相同,需要比较每个字符,并且由于它们可以包含任意 UTF 或二进制数据,这并不总是那么简单。

需要注意的一件事是,您应该只在需要输入其他内容的地方使用符号,"symbolizing" 任意值是一种浪费。例如,如果您的散列包含一个 UUID 作为键,这是不太可能重复的东西,请将其存储为字符串。一般来说,每个符号在程序运行期间都保留在 Ruby 内存中,因此您需要为符号本身支付少量 one-time 费用。

不过,如果您申报了数百万个,这笔费用可能会增加。如果该符号仅使用一次,可能会导致大量过度使用内存,从而达不到目的。

a: 'b':a => 'b' 的快捷方式。就这些了。