键:值与键:红宝石中的值?

时间:2019-06-18 10:39:53

标签: ruby symbols

在关联中,我们通常会进行a :bbelongs_to :something)。当我们使用符号键创建哈希时,通常会执行a: b。话虽如此,我的问题是两种语法之间的区别是什么。还有什么逻辑可以记住何时使用哪种约定?

2 个答案:

答案 0 :(得分:10)

这与约定无关,与语法有关。

:somethingSymbol

belongs_to :something是一种发送到隐式self的方法,同时也省略了括号。我们可以将其编写为如下所示:

self.belongs_to(:something)

:something只是传递给方法belongs_to的参数。

Hash中,我们可以使用Symbol作为密钥:

hash = { :something => "hello" }

Ruby在1.9版中引入了另一种语法,当键是符号时可以使用:

hash = { something: "hello" }

两个版本都是等效的。

答案 1 :(得分:1)

此处的区别在于方法调用哈希键。它们看起来非常相似,如果您不确定要查找的内容,则很容易混淆。

在您的第一个示例中:

a :b

长格式为:

a(:b)

现在显然是方法(:b)的参数(a)。

另一种形式是不同的:

a: b

如果这是这样的方法调用的一部分:

f a: b

那实际上意味着:

f(a: b)

完整格式为:

f({ a: b })

这里是遵循key: value样式的哈希定义。这里的:a是键(符号),b是值(变量或方法调用)。

您经常会在a: :b上看到符号键和值。

要在阅读代码时区分这两种形式,请查看代码出现的位置以获得上下文感。编写代码时,请务必更清楚地根据方法调用哈希定义来构想。