Ruby-实习生和to_sym有什么区别

Ruby-实习生和to_sym有什么区别,ruby,methods,symbols,Ruby,Methods,Symbols,我偶然发现了Ruby字符串文档并测试了这些方法。我发现两种相似的方法是to_sym和intern方法 "cat".intern => :cat "cat".to_sym => :cat 我搜索了Stack Overflow,但令人惊讶的是,竟然没有人问这个问题。我自己找不到两者之间的区别,所以我想我会问这个问题 如果他们做同样的事情,一种方法比另一种快吗?如果是这样,那么使用这种方法是有意义的。它们似乎是同一事物的别名。从中可以看到,intern的示例代码使用来表示sym: 实习

我偶然发现了Ruby字符串文档并测试了这些方法。我发现两种相似的方法是to_sym和intern方法

"cat".intern
=> :cat

"cat".to_sym
=> :cat
我搜索了Stack Overflow,但令人惊讶的是,竟然没有人问这个问题。我自己找不到两者之间的区别,所以我想我会问这个问题


如果他们做同样的事情,一种方法比另一种快吗?如果是这样,那么使用这种方法是有意义的。

它们似乎是同一事物的别名。从中可以看到,
intern
的示例代码使用
来表示sym

实习生→ 符号 返回与str相对应的符号,如果有,则创建符号 以前不存在。请参见
Symbol#id2name

"Koala".intern         #=> :Koala
s = 'cat'.to_sym       #=> :cat
s == :cat              #=> true
s = '@cat'.to_sym      #=> :@cat
s == :@cat             #=> true
这也可用于创建无法表示的符号 使用:xxx符号

'cat and dog'.to_sym   #=> :"cat and dog"

在其一个linter cop中使用此比较作为示例:默认情况下,此cop的设置
to_sym
优先于
intern
,而无需参考样式指南或其他文档。我个人的观察是,做出选择仅仅是因为可读性;考虑到性能不是其他答案中所述的问题。

如果您展开他们的源代码视图,他们都列出了
rb\u str\u intern()
的定义。正如预期的那样,看起来没有区别。在这种情况下,有一种方法的性能更快吗?如果是这样,那么这将是正确的方法use@user3713082它们不是相互竞争的定义。它们只是化名。所以,在性能上不应该有任何区别。在这里,它非常肯定是相同的:这是非常糟糕的示例代码。为什么他们会给你一些例子来展示给_sym,而不是使用实际的别名,而不指出它是一个别名。唉,我在文档中看到过很多这样的情况,示例中没有使用实际的方法,我不明白为什么会发生这种情况。
to_sym
只是
intern
的别名,后者是在中间创建的。