首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >key : value vs key : value in ruby?

key : value vs key : value in ruby?
EN

Stack Overflow用户
提问于 2019-06-18 18:39:53
回答 2查看 99关注 0票数 6

在关联中,我们通常使用a :b (belongs_to :something)。当我们创建一个带有符号键的散列时,我们通常使用a: b。话虽如此,我的问题是这两种语法之间的区别是什么。还有,有没有什么逻辑可以记住什么时候使用哪个约定?

EN

回答 2

Stack Overflow用户

发布于 2019-06-18 18:46:48

这不是关于约定,而是关于语法。

:something是一个Symbol

belongs_to :something是一个被发送到隐式self的方法,同时也省略了括号。我们可以像下面这样写来让这一点变得显而易见:

代码语言:javascript
复制
self.belongs_to(:something)

因此,:something只是传递给belongs_to方法的一个参数。

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

代码语言:javascript
复制
hash = { :something => "hello" }

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

代码语言:javascript
复制
hash = { something: "hello" }

这两个版本是等效的。

票数 10
EN

Stack Overflow用户

发布于 2019-06-19 00:36:29

这里的区别在于方法调用和散列键。它们看起来非常相似,如果你不确定你要找的是什么,很容易混淆。

在您的第一个示例中:

代码语言:javascript
复制
a :b

在长文中这是:

代码语言:javascript
复制
a(:b)

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

在另一种形式中,它是不同的:

代码语言:javascript
复制
a: b

如果这是方法调用的一部分,如下所示:

代码语言:javascript
复制
f a: b

那么这实际上意味着:

代码语言:javascript
复制
f(a: b)

它的完整形式是:

代码语言:javascript
复制
f({ a: b })

其中,这是key: value样式后面的散列定义。这里:a是键(符号),b是值(变量或方法调用)。

你会经常看到有符号键和值的a: :b

要在阅读代码时区分这两种形式,请看一下代码出现在哪里,以获得上下文的感觉。在编写代码时,请始终根据方法调用和散列定义更清晰地表达您的想法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56647271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档