如何显示修改后的字符串?

时间:2015-07-21 15:40:38

标签: ruby string

我正在创建一个Daffy Duck语音转换器(非常简单。直接来自CodeCademy),我遇到了显示来自用户的修改条目的问题。

代码:

puts "What would you like to convert to Daffy Duck language?"
user_input = gets.chomp
user_input.downcase!

if user_input.include? "s"
    user_input.gsub!(/s/, "th")
    print #{user_input}
else puts "I couldn't find any 's' in your entry. Please try again."
end

它会将您输入中的任何''改为'th',因此,听起来就像是一个大声朗读的Daffy Duck。当我将它输入解释器时,它不会显示修改后的字符串。它只会显示用户的原始条目。

编辑: 感谢下面的用户,代码是固定的,我向用户添加了转换文本的通知。谢谢你们!

3 个答案:

答案 0 :(得分:2)

字符串外的#开始comment,因此忽略#{user_input},即

print #{user_input}

相当于

print

您可能想知道为什么单个print输出原始输入。这是因为没有参数print将打印$_。这是由global variable设置的gets

user_input = gets.chomp # assume we enter "foo"
user_input #=> "foo"
$_         #=> "foo\n"

如果传递字符串文字,一切都按预期工作:

print "#{user_input}"

或只是

print user_input

请注意,如果没有执行替换,gsub!会返回nil,因此您可以在if语句中实际使用它:

if user_input.gsub!(/s/, "th")
  print user_input
else
  puts "I couldn't find any 's' in your entry. Please try again."
end

答案 1 :(得分:1)

你只需要在字符串插值周围添加双引号。否则你的代码只是返回输入。

puts "What would you like to convert to Daffy Duck language?"
user_input = gets.chomp
user_input.downcase!

if user_input.include? "s"
  user_input.gsub!(/s/, "th")
  print "#{user_input}"
else 
 puts "I couldn't find any 's' in your entry. Please try again."
end

答案 2 :(得分:1)

实际上,你甚至不需要插值。 print user_input有效。请注意StackOverflow是如何语法突出显示您的代码作为注释。 :)