ruby - 这个串联的运算顺序是什么?

标签 ruby string symbols operator-precedence

x = "hello" " world".to_sym
puts x.class

这有效并允许我将两个字符串连接成一个符号,产生输出:

Symbol

但是,如果我稍微更改它以使用 + 而不是分隔 hello 和 world 字符串的空格,则会收到错误:

x = "hello" + " world".to_sym
puts x.class

这会产生以下错误 - 我认为这是因为它试图将“world”.to_sym 回调“转换”回字符串,然后再将其连接到“hello”字符串:

in `+': can't convert Symbol into String (TypeError)

我想知道是什么让第一个示例起作用?有谁知道这里的操作顺序是什么?我怀疑这两个字符串实际上被视为一个字符串,它们之间的空格被忽略,并且在调用 to_sym 方法之前将它们连接起来。实际上,我预计它的工作方式与第二个示例没有什么不同,因为我认为在尝试连接“hello”和“world”的内容之前,将在“world”字符串上调用 to_sym 。

最佳答案

第一个例子是语法糖,通常你会看到这样写:

x = "Here is a string that " \
    "I want to split across " \
    "several lines..."

所以这首先发生在to_sym之前。在第二个示例中,您实际上是在调用:

x = "hello".+( "world".to_sym )

这显然行不通,因为 String#+ 不能用符号作为参数做任何有用的事情。

简而言之,如果你想做 "hello world".to_sym 并且无论出于何种原因你都不能这样写,那么就不要做第一个,然后只使用括号: ("hello"+ "world").to_sym

关于ruby - 这个串联的运算顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/668032/

相关文章:

css - @at-root a#{&} 导致错误

python - 如何更改列表中元素的位置

string - PySpark:搜索文本和子集数据框中的子字符串

c - Vugen - 在 mkdir 路径中创建动态值

java - <pluginManagement> 标签在 Maven2 上导致 "cannot find symbol"

python - 我需要像 scapy 这样强大的交互式数据包操作程序

ruby - ruby 中的数组乘法谜题

来自范围的 Ruby 哈希

elf - 在 ELF 文件中,如何确定 _start 的地址?

c++ - 如何检查 makefile 中已定义符号(Eclipse-> 路径和符号)的值?