Ruby - intern和to_sym之间有什么区别

26 ruby methods symbols

我遇到了Ruby String Documentation并测试了这些方法.我发现两种相似的方法是to_sym和intern方法.

"cat".intern
=> :cat

"cat".to_sym
=> :cat
Run Code Online (Sandbox Code Playgroud)

我搜索了Stack Overflow并且令人惊讶地没有被问过.我自己可以发现两者之间没有区别,所以我想我会问这个.

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

Uri*_*ssi 22

它们似乎是同一个东西的别名.从文档,你可以看到的示例代码intern的用途to_sym:

实习生→符号

返回与str对应的Symbol,如果以前不存在则创建该符号.见Symbol#id2name.

"Koala".intern         #=> :Koala
s = 'cat'.to_sym       #=> :cat
s == :cat              #=> true
s = '@cat'.to_sym      #=> :@cat
s == :@cat             #=> true
Run Code Online (Sandbox Code Playgroud)

这也可用于创建无法使用:xxx表示法表示的符号.

'cat and dog'.to_sym   #=> :"cat and dog"
Run Code Online (Sandbox Code Playgroud)

  • 那是一个可怕的示例代码.为什么他们会给你一些显示to_sym的例子,而不是使用实际的别名而不指出它是别名.*叹气*我在文档中看到了很多,其中实例中没有使用实际方法,我不明白为什么会一直发生. (6认同)