将方法结果赋给ruby中的变量

时间:2018-01-24 20:35:36

标签: ruby variables methods

我确信很难找到一个更简单的问题,但我是一个完整的新手。我进行了广泛的搜索,由于某种原因无法找到答案。这是我的代码:

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

我只是想把方法的返回结果变成一个变量,所以我可以在别处使用....

1 个答案:

答案 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这样的事实,例如ifcase实际返回值。在这种情况下,它是在每个块中执行的最后一件事的值,因此结果不会被丢弃,它只是传递:

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

如果您愿意,可以添加这些模式以允许-2C3.4°F之类的内容。