class Bike
attr_accessor :color, :gear_numbers, :style
def spin
puts " spins! Woosh!"
end
end
gw = Bike.new
gw.color = "white"
gw.gear_numbers = 11
gw.style = "compact"
puts "This bike is #{gw.color} and it has #{gw.gear_numbers} gears. Oh, and it has a #{gw.style} design. Did I mention that my bike #{gw.spin}?"
使用IRB,这就是我得到的:
**spins! Woosh!
This bike is white and it has 11 gears. Oh, and it
has a compact design. Did I mention that my bike ?**
为什么“旋转!Woosh!”在字符串之前出现,为什么不是 IN 字符串?
答案 0 :(得分:4)
由于您未从方法中返回字符串,因此您需要直接打印它。
要执行您想要执行的操作,只需从puts
方法中移除spin
,即可开始使用。
class Bike
attr_accessor :color, :gear_numbers, :style
def spin
"spins! Woosh!"
end
end
答案 1 :(得分:2)
因为要插入字符串Ruby需要调用spin
。然后Ruby包含spin
方法的返回值(nil
,因为puts
返回nil
)到字符串中并打印生成的字符串。
答案 2 :(得分:1)
这里的问题是字符串插值需要在字符串传递到您所在的主puts
之前完全完成。作为弄清楚其中的内容的一部分,它必须执行它们出现的顺序中引用的每个方法。
您的spin
方法导致立即 puts
并且它不会返回任何内容,因为puts
的工作方式如何。如果你想提供一个字符串,只需留下它:
def spin
" spins! Woosh!"
end
想想这个字符串插值:
"a #{b} c #{d} e"
这大致相当于:
"a " + b.to_s + " c " + d.to_s + " e"
这些.to_s
调用将强制转换为字符串。您希望在返回整个字符串之前执行b
和d
。
在预测代码将执行时,首先将执行跟踪到底部,然后再进行备份。简单的程序以非常可预测的方式工作。