我在我的代码中设置符号,如下:
"name_of_symbol".to_sym
然而,我的主要工程师在代码审查中发现它是一种不好的做法,并要求我设置符号,例如:
:"name_of_symbol"
当我问他为什么?他说这是一个不好的做法,但当我问他原因时,他只是说“就是这样”,这并不是一个令人满意的答案。那么它到底有什么区别吗?
我在我的代码中设置符号,如下:
"name_of_symbol".to_sym
然而,我的主要工程师在代码审查中发现它是一种不好的做法,并要求我设置符号,例如:
:"name_of_symbol"
当我问他为什么?他说这是一个不好的做法,但当我问他原因时,他只是说“就是这样”,这并不是一个令人满意的答案。那么它到底有什么区别吗?
:“一些奇怪的东西”
是合法的,但不喜欢它,个人而言,我更愿意使用:Some_weird_stuff
,并完全省略引号 - 当你不需要使用引号时使用引号只会增加噪音 - 我非常反对噪音。噪音是不好的实践,它会延长理解时间。{ thing: "value" }
语法非常清晰简洁,令人愉悦。
有趣的是:
irb
> class String ; def to_sym ; puts "bob" ; end ; end
=> nil
> "fred".to_sym
bob
=> nil
> :"fred"
=> :fred
:"#{s}"
或"#{s}".to_sym
,直接使用s.to_sym
。 - Ajedi32其中一个是 Symbol
字面量,另一个是调用方法的 String
字面量。
个人认为,当您想要写一个 Symbol
时却写了一个 String
,然后立即将其转换为一个 Symbol
,这种做法很奇怪。为什么不一开始就写一个 Symbol
呢?那样更清楚明确您的意图。
method_which_returns_a_string.to_sym
就是正确的做法,这并不奇怪。 - Rustam Gasanov:"foo bar"
优于"foo bar".to_sym
,因为它更清晰,更好地表达了您的意图,更易读,速度更快等等。但还有一个原因:"foo bar".to_sym
依赖于String#to_sym
方法,而这个方法可能会被重新定义(虽然很少见)。这是:"foo bar"
在原则上更好的实践的一个非表面原因。to_sym
势必会在全球引发骚乱。 - Cary Swoveland"name_of_symbol".to_sym
:"name_of_symbol"
:name_of_symbol
:sym
语法更易于阅读,那么这只是一个说法。另一方面,如果那个人拒绝解释,那就是我们无法帮助你的事情:(我的建议是:用:sym
定义一个符号,但对于显式转换为符号,请使用.to_sym
。 - Mörre:foo_bar
没有问题,不需要引号,只有在:"foo bar"
的情况下才需要引号。 - Boris Stitnicky