以下代码失败

world = :world
result = 'hello' + world
puts result #=> can't convert Symbol into String

以下代码有效

world = :world
result = "hello #{world}"
puts result #=> hello world

为什么?

使用ruby 1.8.7

推荐答案

字符串插值是一个隐式的to_s调用.比如说:

result = "hello #{expr}"

大致相当于:

result = "hello " + expr.to_s

正如卡里姆79所说,一个符号不是一个字符串,但符号有to_s种方法,所以你的插值工作;使用+进行连接的try 无效,因为没有+的实现可以理解左侧的字符串和右侧的符号.

Ruby相关问答推荐

Ruby中链表大小调用的时间复杂度

Ruby 中的 Hash[key] 返回 nil 但 hash 没有 nil 值

在 Ruby 中使用委托维护相同的类

如何修改 Ruby gem

在 gem 中放置/访问配置文件的位置?

在 Ruby 早期转义 .each { } 迭代

确保如何在 ruby​​ 中工作

在 Ruby 中,获取第一个块返回 true 的可枚举元素的最快方法是什么?

Ruby 中的排序稳定吗?

Ruby:获取不带扩展名的文件名

我不明白Ruby本地范围(local scope)

有没有办法从该实例内部为 Ruby 类的实例创建方法?

无法在 Windows 上安装 Aptana Studio 3.6

Ruby:将字符串转换为日期

Ruby全局匹配正则表达式?

Mustache Templates 可以做模板扩展吗?

创建一个接受参数散列的 ruby​​ 方法

if语句末尾带有then有什么区别?

什么是 Rakefile?

Ruby中的字符串和符号有什么区别?