我确信很难找到一个更简单的问题,但我是一个完整的新手。我进行了广泛的搜索,由于某种原因无法找到答案。这是我的代码:
puts "Enter F for Fahrenheit and C for Celsius."
x = gets.chomp.downcase
def ftoc(fahrenheit)
(fahrenheit.to_f - 32.0) * (5.0 / 9.0)
end
if x == "f"
puts "Enter your temp:"
temp = gets.chomp.to_i
ftoc temp
elsif x == "c"
puts "Enter your temp:"
temp = gets.chomp.to_i
ctof temp
else
puts "That does not compute."
end
我只是想把方法的返回结果变成一个变量,所以我可以在别处使用....
答案 0 :(得分:0)
请记住,像ctof temp
这样的调用只是启动了一种方法,然后,由于您没有将结果放在任何地方,请立即将其丢弃。
要清理此代码,请让我们更好地整理它:
# Temperature conversion method
def ftoc(fahrenheit)
(fahrenheit.to_f - 32.0) * (5.0 / 9.0)
end
# User input method
def temperature_prompt!
puts "Enter F for Fahrenheit and C for Celsius."
x = gets.chomp.downcase
case (x)
when "f"
puts "Enter your temp:"
temp = gets.chomp.to_i
ftoc temp
when "c"
puts "Enter your temp:"
temp = gets.chomp.to_i
ctof temp
else
puts "That does not compute."
end
end
现在你可以利用Ruby这样的事实,例如if
和case
实际返回值。在这种情况下,它是在每个块中执行的最后一件事的值,因此结果不会被丢弃,它只是传递:
temp = temperature_prompt!
如果您输入的值无效,则会得到puts
的结果,方便nil
。
这里需要考虑的事项:如果你可以描述模式,Ruby非常擅长解析任意文本。这是一个简单的输入例程:
def temperature_prompt!
puts "Enter degrees (e.g. 8F, 2C)"
case (input = gets.chomp.downcase)
when /(\d+)f/
ftoc $1
when /(\d+)c/
ctof $1
else
puts "That does not compute."
end
end
如果您愿意,可以添加这些模式以允许-2C
和3.4°F
之类的内容。