Ruby符号设置

Jak*_*Zak 6 ruby symbols ruby-on-rails string-to-symbol

我在我的代码中设置了符号,如:

"name_of_symbol".to_sym
Run Code Online (Sandbox Code Playgroud)

但是,我的主要工程师在代码审查期间选择了它作为一种不好的做法,并要求我设置如下符号:

:"name_of_symbol"
Run Code Online (Sandbox Code Playgroud)

当我问他为什么?他说这是不好的做法,但当我问他说的是什么原因时,这并不是一个令人满意的答案.所以怎么回事?有什么不同吗?

Gho*_*oti 6

冒号表示符号.我不会把它称为不良做法,而不是非常规做法,这可能会使代码更难理解.

我知道这:"Some weird stuff"是合法的,但不喜欢它,我个人宁愿使用:Some_weird_stuff并将引号全部放在一起 - 当你不需要时使用引号只是添加噪音 - 我非常反噪.噪音是不好的做法,它使理解需要更长时间.

有时,当你匹配以字符串形式出现的东西时,为了保持一致,你想要符号,那么你没有太多选择,但我不想问这个问题,FWIW.

当你有语法清洁符号时,你可以使用

{ thing: "value" }
Run Code Online (Sandbox Code Playgroud)

语法,这是一种快乐,非常清晰和整洁.

有趣的是,尽管如此:

irb
> class String ; def to_sym ; puts "bob" ; end ; end
  => nil
> "fred".to_sym
  bob
  => nil
> :"fred"
  => :fred
Run Code Online (Sandbox Code Playgroud)

所以鲍里斯的观点是有效的.

  • 所以你有一个字符串,你正在做:"#{s}" - 我个人用to_sym,插入一个字符串,然后在后台动态调用to_sym ......我觉得有点无意义:) (4认同)
  • 换句话说,不要做`:"#{s}"`或``#{s}".to_sym`,只做`s.to_sym` (3认同)

Bor*_*cky 3

其他答案正确地认为:"foo bar"优于,"foo bar".to_sym因为它更清晰,更好地表达你的意图,更具可读性,更快等。但还有一个原因:"foo bar".to_sym依赖于String#to_sym方法,并且有一种可能性(尽管远程)该方法可能是重新定义。:"foo bar"这是原则上更好的做法的一个非美观原因。

  • 确实如此,尽管重新定义“to_sym”肯定会引起全世界的骚乱。 (3认同)