it-swarm.cn

Ruby中的符号是什么?

我对Ruby)完全陌生,我对Symbols的概念有些困惑。Symbols和Variables有什么区别?为什么不仅仅使用变量?

谢谢。

49
wassimans

变量和符号是不同的东西。变量指向不同类型的数据。在Ruby中,符号更像是字符串,而不是变量。

在Ruby中,字符串是可变的,而符号是不可变的。这意味着只需要创建一个符号的副本。因此,如果您有

x = :my_str
y = :my_str

:my_str将仅创建一次,并且xy指向相同的内存区域。另一方面,如果您有

x = "my_str"
y = "my_str"

将创建一个包含my_str的字符串两次,并且xy将指向不同的实例。

结果,符号通常与Ruby中的枚举等效,也用作字典的键(哈希)。

74
mipadi

Ruby)中的符号与现实世界中的符号基本相同。它用于表示或命名。

符号非常常用于表示某种状态,例如

order.status = :canceled
order.status = :confirmed

您也可以将符号视为即时枚举。您无需定义符号,只需使用它即可。 本文对此进行了详细说明。

18
Jakub Arnold

通常,变量容易与字符串混淆,但是我可以理解您认为它就像一个变量。这是可以理解的。这样想:

游戏中玩家的状态用数字表示。 1表示存活,2表示不确定,3表示死亡。可以很容易地用符号代替。符号可以是:alive:unsure:dead。要检查玩家是否还活着,而不是这样做:

if player_status == 1

您可以这样做:

if player_status == :alive

1
sirsnow