Ruby中print输出是否支持插值、能否中途调用gets获取用户输入?
问题1:Ruby的print是否支持字符串插值?
print方法本身只负责输出传入的字符串内容,Ruby的字符串插值是双引号字符串的原生特性,只要你传入print的是双引号包裹的字符串(包括你示例中用的三引号 heredoc 双引号字符串),就可以正常使用#{}语法完成插值,示例如下:
user_id = 1001 print "当前登录用户ID:#{user_id}\n" # 输出内容:当前登录用户ID:1001
问题2:能否在多段print输出的中途调用gets获取用户输入?
你示例中把完整多行字符串一次性传给print的写法无法实现这个需求:Ruby会先完成整个字符串的构造,再把完整内容一次性输出,不可能在字符串内容的中间插入gets执行逻辑。
你只需要把输出逻辑拆分成多段,在两次输出之间调用gets即可实现需求,示例代码如下:
# 输出第一段提示 print "Input 1: " # 中途调用gets获取用户输入 input1 = gets.chomp # 获取输入完成后再输出第二段提示 print "Input 2: " input2 = gets.chomp
运行后效果为:先打印Input 1: 等待用户输入,用户输入完成后才会打印Input 2: 等待第二次输入,完全符合你的需求。
注:如果确实想要用类似插值的写法在输出过程中插入执行逻辑,可以在插值位写可调用对象,但可读性极低,不推荐在生产环境使用:
print "Input 1: #{-> { gets.chomp }.call}\nInput 2: "
内容的提问来源于stack exchange,提问作者Mohiuddin Ahmad Khan
相关产品推荐
相关产品推荐

