Ruby on Rails:我们应该如何编写符号 - 符号:vs:symbol =>

时间:2014-03-28 21:56:11

标签: ruby-on-rails ruby syntax ruby-on-rails-4 symbols

我知道symbol: "value"symbol => "value"都是有效的语法。

目前,我没有使用哪个标准。例如,在image_tag中,有时我会写class: "css_class",但有时在模型has_many中,我会使用:through => :line_items

通常,我甚至在一个代码句中混合了这两个并且复杂了。

我真的很想听听你的建议,哪些是在特定情况下使用的最佳(适当的)。 (我知道它们都是正确的,但更具表现力,干净和美观的代码。)可能是您的偏好。

3 个答案:

答案 0 :(得分:2)

为了帮助您确定要使用的哈希文字语法,请查看:

来自Ruby Style Guide on Collections:的

代码段

最好使用符号而不是字符串作为散列键。

# bad
hash = { 'one' => 1, 'two' => 2, 'three' => 3 }

# good
hash = { one: 1, two: 2, three: 3 }

当您的哈希键是符号时,使用Ruby 1.9哈希语法。

# bad
hash = { :one => 1, :two => 2, :three => 3 }

# good
hash = { one: 1, two: 2, three: 3 }
<3>不要将Ruby 1.9哈希语法与哈希火箭混合在同一个哈希文字中。

当你获得的符号不符合哈希火箭的语法符号时,

# bad
{ a: 1, 'b' => 2 }

# good
{ :a => 1, 'b' => 2 }

答案 1 :(得分:1)

您可能知道,冒号(key: value)语法是在Ruby 1.9中引入的。如果您正在编写一个您要分发给可能正在运行早期版本Ruby的人的库,请使用箭头(:key => value)语法。

除此之外,这完全取决于个人喜好。我更喜欢冒号语法,因为它通常会减少视觉混乱,因为屏幕上只有一个符号,而不会降低可读性。

然而,我更喜欢箭头语法的一种情况是使用散列箭头语法的DSL(或者,它可以被争论,滥用)来表示从X到Y的&#34; #34;关系。一个很好的例子是state_machine gem,它描述了这样的转换:

transition :first_gear => :idling

这里的箭头使其读起来几乎像英语:&#34;在空闲上,第一档状态的对象应该转换为空闲&#34。使用冒号语法不会难以理解,但因为state_machine也允许数组作为键,所以最好只使用箭头语法来保持一致性:

transition first_gear: :idling
# ...
transition [:idling, :first_gear] => :parked

在这里,他们不匹配,这在视觉上和精神上都很刺耳 - 不多,但足以值得考虑。

在通过关联进行ActiveRecord查询时,我有时也喜欢Rails,例如

User.where( active: true, :role => { name: "admin" } )
# vs.
User.where( active: true, role: { name: "admin" } )

出于某种原因,=>有助于加强我对关联或JOIN的理解。再一次,仅仅是个人偏好,在这种情况下,我认为它与state_machine示例相比差别更小。

答案 2 :(得分:0)

我认为这取决于个人偏好。就个人而言,我尽量避免使用hashrockets。在某些情况下,您有义务使用hashrocket,例如:

Post.joins(:comments).where('comments.commenter' => 'Peter')

新语法仅支持符号作为键,而不支持字符串。如果你碰巧使用很多字符串作为键,你的问题的答案明确指出坚持使用hashrocket。但是,根据我的个人经验,我可以使用符号作为当时的9/10键。

1.9引入的新语法对我来说似乎更干净。这很难解释,但是如果我用hashrockets打开一堆代码并重写代码来使用:相反它让我更开心。我们可以谈论微小的技术差异,但最终归结为的外观和感觉更好。对我来说,它基本上与Coffeescript相同(尽管这涉及更多的语法更改)。我只是喜欢我的编辑器中的外观。

还有一个小问题。我个人喜欢尽可能使用最新的语法。我不担心弃用,但使用Rails进行演变感觉更自然。我不喜欢使用“旧”的感觉。语法,这当然是完全主观的。